将值分配给3D python数组中的特定下标索引会引发错误

时间:2017-08-27 21:31:01

标签: python arrays numpy 3d indices

假设我已经在3D中初始化了一个数组:

arr_3d = np.zeros((100, 100, 100))

现在我想将(i, j, k)的下标索引arr_3d的元素更改为某个值(比如1),其中i, j, k是大小为{的索引的列表(或数组) {1}}分别沿三个轴。我尝试了100, 100, 40,但它会抛出错误。我已经尝试将下标索引转换为arr_3d[i, j, k] = 1的线性索引,但看起来它不能转换3D数组的下标索引。

上述问题很容易在Matlab中解决,使用np.ravel_multi_index()可以使用。

1 个答案:

答案 0 :(得分:1)

尝试使用不同的维度,不同的维度

In [1375]: a=np.zeros((2, 3, 4))
In [1376]: a[np.ix_([0], [1,2], [0,1])] = 1
In [1377]: a
Out[1377]: 
array([[[ 0.,  0.,  0.,  0.],
        [ 1.,  1.,  0.,  0.],
        [ 1.,  1.,  0.,  0.]],

       [[ 0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.]]])

numpy将数组划分为第一维上的'planes'; MATLAB最后做到了。所以这显示了2个平面或块,每个3x4。

八度音阶

>> a = zeros(2,3,4);
>> a([1],[2,3],[1,2]) = 1
a =

ans(:,:,1) =

   0   1   1
   0   0   0

ans(:,:,2) =

   0   1   1
   0   0   0

ans(:,:,3) =

   0   0   0
   0   0   0

ans(:,:,4) =

   0   0   0
   0   0   0

4块2x3。