给定一个数组,
>>> n = 2
>>> a = numpy.array([[[1,1,1],[1,2,3],[1,3,4]]]*n)
>>> a
array([[[1, 1, 1],
[1, 2, 3],
[1, 3, 4]],
[[1, 1, 1],
[1, 2, 3],
[1, 3, 4]]])
我知道可以像这样简洁地替换其中的值,
>>> a[a==2] = 0
>>> a
array([[[1, 1, 1],
[1, 0, 3],
[1, 3, 4]],
[[1, 1, 1],
[1, 0, 3],
[1, 3, 4]]])
是否可以对数组中的整行(最后一个轴)执行相同的操作?我知道这a[a==[1,2,3]] = 11
将起作用并将匹配子数组的所有元素替换为 11,但我想替换一个不同的子数组。我的直觉告诉我要写以下内容,但结果是错误的,
>>> a[a==[1,2,3]] = [11,22,33]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: array is not broadcastable to correct shape
总之,我想得到的是:
array([[[1, 1, 1],
[11, 22, 33],
[1, 3, 4]],
[[1, 1, 1],
[11, 22, 33],
[1, 3, 4]]])
...当然,一般来说,n 比 2 大很多,其他轴也比 3 大,所以如果我不需要的话,我不想循环它们。
更新:([1,2,3]
或我正在寻找的其他任何东西)并不总是在索引 1。一个例子:
a = numpy.array([[[1,1,1],[1,2,3],[1,3,4]], [[1,2,3],[1,1,1],[1,3,4]]])