by Anonymous » 14 Apr 2025, 11:22
Sag, ich habe ein Array wie folgt: < /p>
Code: Select all
arr = np.asarray([1, 2, 3, 4294967296, 100], dtype=np.uint64)
< /code>
Ich möchte jetzt zwei Arrays, ein Array mit den unteren 32 Bit jedes Elements und eine mit den oberen 32 Bit jedes Elements, vorzugsweise mit Ansichten und Minimierung von Kopien, um so etwas zu erhalten: < /p>
upper = np.array([0, 0, 0, 1, 0], dtype=np.uint32)
lower = np.array([1, 2, 3, 0, 100], dtype=np.uint32)
< /code>
Ich habe Folgendes ausprobiert: < /p>
lower = arr.view() & 0xFFFFFFFF
upper = np.bitwise_right_shift(arr.view(), 32)
Dies führt jedoch zu einer Kopie für die oberen Bits aufgrund der Bitverschiebung, und beide Arrays sind immer noch vom Typ uint64 . Gibt es weitere Optimierungen, die ich ausprobieren kann oder ich habe kein Glück und muss die zusätzlichen Kopien auffressen?
Sag, ich habe ein Array wie folgt: < /p>
[code]arr = np.asarray([1, 2, 3, 4294967296, 100], dtype=np.uint64)
< /code>
Ich möchte jetzt zwei Arrays, ein Array mit den unteren 32 Bit jedes Elements und eine mit den oberen 32 Bit jedes Elements, vorzugsweise mit Ansichten und Minimierung von Kopien, um so etwas zu erhalten: < /p>
upper = np.array([0, 0, 0, 1, 0], dtype=np.uint32)
lower = np.array([1, 2, 3, 0, 100], dtype=np.uint32)
< /code>
Ich habe Folgendes ausprobiert: < /p>
lower = arr.view() & 0xFFFFFFFF
upper = np.bitwise_right_shift(arr.view(), 32)
[/code]
Dies führt jedoch zu einer Kopie für die oberen Bits aufgrund der Bitverschiebung, und beide Arrays sind immer noch vom Typ uint64 . Gibt es weitere Optimierungen, die ich ausprobieren kann oder ich habe kein Glück und muss die zusätzlichen Kopien auffressen?