为 3D python 数组中的特定下标索引赋值会引发错误
Assigning values to specific subscript indices in 3D python array throws errors
假设我已经将 3D 数组初始化为:
arr_3d = np.zeros((100, 100, 100))
现在我想将 arr_3d
的下标索引 (i, j, k)
处的元素更改为某个值(比如 1),其中 i, j, k
是索引的列表(或数组)大小 100, 100, 40
,分别沿三个轴。我试过 arr_3d[i, j, k] = 1
,但它会引发错误。我已经尝试通过 np.ravel_multi_index()
将下标索引转换为线性索引,但它看起来无法转换 3D 数组的下标索引。
上述问题在 Matlab 中很容易解决,其中使用 arr_3d(i, j, k) = 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。
假设我已经将 3D 数组初始化为:
arr_3d = np.zeros((100, 100, 100))
现在我想将 arr_3d
的下标索引 (i, j, k)
处的元素更改为某个值(比如 1),其中 i, j, k
是索引的列表(或数组)大小 100, 100, 40
,分别沿三个轴。我试过 arr_3d[i, j, k] = 1
,但它会引发错误。我已经尝试通过 np.ravel_multi_index()
将下标索引转换为线性索引,但它看起来无法转换 3D 数组的下标索引。
上述问题在 Matlab 中很容易解决,其中使用 arr_3d(i, j, k) = 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。