我有一个形状为dataX
的阵列(4,9359,10852),我有第二个形状为dataY
的阵列(9359,10852)。 dataY
可以包含1到6之间的值。我想执行以下操作。
dataY
中获取5.0的位置。 dataX
中的索引,并将所有4个维度中的值作为较小的numpy数组获取。我已经完成了这个idx = np.where(dataY == 5.0)
element = dataX[:,idx[0],idx[1]]
idx[0].size
= 860498
element.shape
=(4,860498)
但我希望元素是3D数组,而不是2D列表。我该怎么做?
答案 0 :(得分:0)
idx
标识dataY
的5.0的元素。它发现了很多这些,但它们不能(通常)排列成2d阵列。因此dataY[idx]
将返回一个5(860498)的数组5。
同样,当idx
用于从dataX
中选择项目时,它会“变平”'最后2个维度。
使用可以完整打印的小型阵列可以更容易地进行可视化。
In [104]: y=np.arange(12).reshape(4,3)
In [105]: y
Out[105]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
In [106]: idx = np.where(y%2)
In [107]: idx
Out[107]: (array([0, 1, 1, 2, 3, 3]), array([1, 0, 2, 1, 0, 2]))
In [108]: y[idx]
Out[108]: array([ 1, 3, 5, 7, 9, 11])
In [110]: np.ma.masked_array(y, y%2==0)
Out[110]:
masked_array(
data=[[--, 1, --],
[3, --, 5],
[--, 7, --],
[9, --, 11]],
mask=[[ True, False, True],
[False, True, False],
[ True, False, True],
[False, True, False]],
fill_value=999999)