Effizienter und lesbarer Weg, um N-dimensionales Indexarray in C-Ordnung mit Numpy zu erhaltenPython

Python-Programme
Anonymous
 Effizienter und lesbarer Weg, um N-dimensionales Indexarray in C-Ordnung mit Numpy zu erhalten

Post by Anonymous »

Wenn ich ein n-dimensionales Indexarray in C-Ordnung erzeugen muss, habe ich ein paar verschiedene numpy-Ansätze ausprobiert.

Code: Select all

np.stack(np.meshgrid(*[np.arange(i, dtype=dtype) for i in sizes], indexing="ij"), axis=-1).reshape(-1, len(sizes))
< /code>
lesbarer mit guter Leistung: < /p>
np.ascontiguousarray(np.indices(sizes, dtype=dtype).reshape(len(sizes), -1).T)
< /code>
Hier bin ich mir nicht sicher, ob die Kopie von AscontiguousArray tatsächlich erforderlich ist oder ob es einen besseren Weg gibt, um sicherzustellennp.vstack([*np.ndindex(sizes)], dtype=dtype)
< /code>
Die Iteratorumwandlung ist für größere Arrays ziemlich langsam. Sicher ist das Array c-contiNous? < /p>
Beispiel: < /p>
sizes = (3, 1, 2)
idx = np.ascontiguousarray(np.indices(sizes).reshape(len(sizes), -1).T)
print(idx)
print(f"C_CONTIGUOUS: {idx.flags['C_CONTIGUOUS']}")
# [[0 0 0]
#  [0 0 1]
#  [1 0 0]
#  [1 0 1]
#  [2 0 0]
#  [2 0 1]]
# C_CONTIGUOUS: True

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post