我正在将供应商提供的大型二进制数组读入 2D numpy 数组 tempfid(M, N)
# load data
data=numpy.fromfile(file=dirname+'/fid', dtype=numpy.dtype('i4'))
# convert to complex data
fid=data[::2]+1j*data[1::2]
tempfid=fid.reshape(I*J*K, N)
然后我需要使用索引的非平凡映射将其重塑为 4D 数组有用4d(N,I,J,K)。我使用 for 循环按照以下方式执行此操作:
for idx in range(M):
i=f1(idx) # f1, f2, and f3 are functions involving / and % as well as some lookups
j=f2(idx)
k=f3(idx)
newfid[:,i,j,k] = tempfid[idx,:] #SLOW! CAN WE IMPROVE THIS?
转换为复数需要 33% 的时间,而复制这些片 M 个片需要剩余的 66%。计算索引的速度很快,无论我是在如图所示的循环中逐一执行此操作,还是通过 numpy.vectorizing 操作并将其应用到 arange(M) 来执行此操作。
有没有办法加快这个速度?对于更有效的切片、复制(或不复制)等的任何帮助,我们表示赞赏。
EDIT:正如在问题的回答中了解到的“将交错 NumPy 整数数组转换为 Complex64 的最快方法是什么?” https://stackoverflow.com/q/5658047/607562如果使用视图来代替,则复杂的转换速度可以加快 6 倍:
fid = data.astype(numpy.float32).view(numpy.complex64)