gpt4 book ai didi

python - 如何使用 python 替换大型二维数组中存在的所有匹配数组?

转载 作者:太空宇宙 更新时间:2023-11-04 09:40:53 28 4
gpt4 key购买 nike

我有一个很大的二维数组。我想用另一个数组替换特定的数组元素。更清楚地说,这是我想在 python 中做的一个例子:

a = np.random.randint(0, 255, size=(10, 3))
print "a : \n", a
a[a<200]=0
a[a>=200]=255
print "Normalize a : \n", a

它给出任何随机输出,如:

a :
[[119 19 16]
[226 33 102]
[163 188 235]
[ 22 85 176]
[ 25 188 85]
[ 78 146 141]
[229 10 37]
[ 38 79 92]
[142 107 213]
[107 228 145]]
Normalize a :
[[ 0 0 0]
[255 0 0]
[ 0 0 255]
[ 0 0 0]
[ 0 0 0]
[ 0 0 0]
[255 0 0]
[ 0 0 0]
[ 0 0 255]
[ 0 255 0]]

现在,我想替换所有 [255 0 0][255 255 255] .可以使用任何循环,如 for 循环,但如果它是一个非常大的数组,则非常耗时。有什么简单的为什么要使用 np.where 吗?或者我曾经使用 a[a<200]=0 替换 200 以下的所有元素的其他东西?

最佳答案

IIUC,是的,您可以使用与上面类似的方法,使用 np.all:

示例:

a = np.random.randint(0, 255, size=(10, 3))

>>> a
array([[ 10, 113, 91],
[ 99, 63, 164],
[ 96, 130, 35],
[193, 38, 11],
[193, 150, 200],
[242, 195, 28],
[ 6, 205, 168],
[156, 35, 242],
[246, 84, 61],
[111, 187, 18]])

# Use `np.where` to make your normalization
b = np.where(a >= 200, 255, 0)

>>> b
array([[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 255],
[255, 0, 0],
[ 0, 255, 0],
[ 0, 0, 255],
[255, 0, 0],
[ 0, 0, 0]])

# Replace [255,0,0] with [255,255,255]
b[np.all(b==[255,0,0], axis=1)] = [255,255,255]

>>> b
array([[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 0],
[ 0, 0, 255],
[255, 255, 255],
[ 0, 255, 0],
[ 0, 0, 255],
[255, 255, 255],
[ 0, 0, 0]])

解释:

np.all(b==[255,0,0],axis=1) 返回您的数组与 [255,0,0] 的所有元素匹配的位置:

array([False, False, False, False, False,  True, False, False,  True,
False])

因此您可以通过它索引您的数组以返回这些向量:

>>> b[np.all(b==[255,0,0],axis=1)]
array([[255, 0, 0],
[255, 0, 0]])

并以与上述类似的方式替换它们。

关于python - 如何使用 python 替换大型二维数组中存在的所有匹配数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51770481/

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