使用另一个数组作为索引从4D numpy数组中读取元素

时间:2018-05-04 15:36:35

标签: python arrays numpy

我有一个形状为dataX的阵列(4,9359,10852),我有第二个形状为dataY的阵列(9359,10852)。 dataY可以包含1到6之间的值。我想执行以下操作。

  1. dataY中获取5.0的位置。
  2. 将其用作dataX中的索引,并将所有4个维度中的值作为较小的numpy数组获取。我已经完成了这个
  3. idx = np.where(dataY == 5.0)    
    element = dataX[:,idx[0],idx[1]]
    

    idx[0].size = 860498

    element.shape =(4,860498)

    但我希望元素是3D数组,而不是2D列表。我该怎么做?

1 个答案:

答案 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)