,我有一个数组,如下:
arr = np.ones([1, 2, 3, 4294967296, 100], dtype=np.uint64)
现在,我想要两个阵列,一个阵列,每个元素的下32位,一个带有每个元素的上部32位,最好通过使用视图和最小化副本来获得这样的东西:
upper = np.array([0, 0, 1, 0], dtype=np.uint32)
lower = np.array([1, 2, 0, 100], dtype=np.uint32)
我尝试了以下内容:
lower = arr.view() & 0xFFFFFFFF
upper = np.bitwise_right_shift(arr.view(), 32)
但是,由于bitshift,这会导致上部的副本,并且两个阵列仍为类型uint64
。我可以尝试或不幸的是需要进一步的优化,需要吃额外的副本吗?
# Create a structured view of the array (assuming little-endian system)
view = arr.view(dtype=np.dtype([('lower', np.uint32), ('upper', np.uint32)]))
# Extract views
lower = view['lower']
upper = view['upper']
创建内存视图而不是复制,并保留uint32 dtypes
。