是否有numpy方法或功能将UINT64阵列分为两个阵列Uint32

问题描述 投票:0回答:1

,我有一个数组,如下:

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

。我可以尝试或不幸的是需要进一步的优化,需要吃额外的副本吗?

python numpy performance optimization numpy-ndarray
1个回答
1
投票
您可以使用结构化数组将UINT64分为两个UINT32视图而无需复制:

# 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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.