gpt4 book ai didi

python - 替换numpy中的子数组

转载 作者:太空狗 更新时间:2023-10-30 01:16:47 24 4
gpt4 key购买 nike

给定一个数组,

>>> 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]]])

最佳答案

您可以使用 np.all 检查是否所有列都具有用于比较的 True 值,然后使用创建的掩码来实现更高的性能替换值:

mask = np.all(a==[1,2,3], axis=2)
a[mask] = [11, 22, 23]

print(a)
#array([[[ 1, 1, 1],
# [11, 22, 33],
# [ 1, 3, 4]],
#
# [[ 1, 1, 1],
# [11, 22, 33],
# [ 1, 3, 4]]])

关于python - 替换numpy中的子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10894000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com