我有一个 2d numpy array(shape(y,x)=601,1200)
和一个 3d numpy array (shape(z,y,x)=137,601,1200)
。
在我的 2d 数组中,我保存了现在想要从 3d 数组访问的z
值,并将y, x
其保存到新的 2d 数组中。
我尝试了这样的事情但没有成功。
levels = array2d.reshape(-1)
y = np.arange(601)
x = np.arange(1200)
newArray2d=oldArray3d[levels,y,x]
IndexError:形状不匹配:索引数组无法与形状一起广播 (721200,) (601,) (1200,)
我不想尝试使用循环的东西,那么有没有更快的方法?
这是您拥有的数据:
x_len = 12 # In your case, 1200
y_len = 6 # In your case, 601
z_len = 3 # In your case, 137
import numpy as np
my2d = np.random.randint(0,z_len,(y_len,x_len))
my3d = np.random.randint(0,5,(z_len,y_len,x_len))
这是构建新二维数组的一种方法:
yindices,xindices = np.indices(my2d.shape)
new2d = my3d[my2d[:], yindices, xindices]
笔记:
my3d
用 3 个整数索引数组索引 3d 数组。reshape(-1)
,因为我们传递的整数索引数组的形状(在任何广播之后)将成为生成的 2d 数组的形状。(y_len,1)
和(1, x_len)
。注意 的不同位置1
。这确保这两个索引数组将被广播本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句