【发布时间】:2018-06-17 13:09:35
【问题描述】:
假设我们有一个像这样的 3D 数组:
array = np.arange(8).reshape(2,2, 2)
new_array = np.zeros((2, 2, 2))
假设我们的数组有一些新的随机 x,y,z 索引
x,y,z = np.meshgrid(array, array, array)
重新索引我们的数组的最快方法是什么?
这里给出一个简单的解决方案:
for x in range(0, 3):
for y in range(0, 3):
for z in range(0, 3):
new_x = x_coord[x,y,z]
new_y = y_coord[x,y,z]
new_z = z_coord[x,y,z]
new_array[x,y,z] = array[new_x, new_y, new_z]
有没有我不知道的one-liner?
编辑
是的,有……非常简单:
vol = np.arange(8).reshape(2,2, 2)
arr = np.arange(2)
x,y,z = np.meshgrid(arr, arr, arr)
print(vol)
print(vol[y, x, z]) ### ---> You have to swap the axes here tho. Does anyone know why?
[[[0 1]
[2 3]]
[[4 5]
[6 7]]]
[[[0 1]
[2 3]]
[[4 5]
[6 7]]]
而且,它非常慢。任何想法如何提高性能?
【问题讨论】:
-
如果您的示例使用整数进行索引并且工作正常,会好很多。
-
已为您修复!现在好点了?还是你要我举个恰当的例子?我认为这个想法应该很简单?我不知道为什么 numpy 中没有简单的操作来做到这一点,因为我认为这只是一个简单的重新索引任务。 @miradulo
-
你能用文字解释一下你想象的算法在做什么吗?
-
randint将简化随机值的生成。 -
你试过
arr[xcord, ycord,zcord]吗?
标签: python arrays numpy indexing