gpt4 book ai didi

python - 通过 if 条件在二维数组之间进行元素明智的比较

转载 作者:太空宇宙 更新时间:2023-11-04 11:13:41 25 4
gpt4 key购买 nike

我有两个二维 numpy 数组 a 和 b,大小为 200*200我想根据条件对这两个数组进行元素明智的比较:

如果 a[x][y]b[x][y]0 打印 0

如果 a[x][y]b[x][y] 中的任何一个是 0 打印 non-零元素

如果a[x][y]b[x][y]非零打印小元素/大元素

我试过 np.all 但它只与一个条件进行比较

我想要这样的 C 代码:

for(i=0;i<200;i++)

for(j=0:j<200;j++)


if( a[i][j]==0 and b[i][j]==0)
....
....

比较后我想将结果打印到另一个二维数组。我如何使用 Python 编码来实现?

最佳答案

取决于你的应用程序,但 numpy 的好处是你不必循环(因此它更快)

import numpy as np

np.random.seed(42)
a = np.random.randint(0,3,size=(5,5))
b = np.random.randint(0,3,size=(5,5))
print(a)
print(b)


where_a_eq_zero = a==0
where_b_eq_zero = b==0


# conditino: a and b is zero
con1 = where_a_eq_zero & where_b_eq_zero
print(con1)

# conditino: a or b is zero
con2 = np.logical_or(where_a_eq_zero,where_b_eq_zero)
print(con2)

# conditino: none of both is a zero element
con3 = ~where_a_eq_zero & ~where_b_eq_zero
print(con3)
# a
array([[2, 0, 2, 2, 0],
[0, 2, 1, 2, 2],
[2, 2, 0, 2, 1],
[0, 1, 1, 1, 1],
[0, 0, 1, 1, 0]])

# b
array([[0, 0, 2, 2, 2],
[1, 2, 1, 1, 2],
[1, 2, 2, 0, 2],
[0, 2, 2, 0, 0],
[2, 1, 0, 1, 1]])

# conditino: a and b is zero
array([[False, True, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
[ True, False, False, False, False],
[False, False, False, False, False]])

# conditino: a or b is zero
array([[ True, True, False, False, True],
[ True, False, False, False, False],
[False, False, True, True, False],
[ True, False, False, True, True],
[ True, True, True, False, True]])

# conditino: none of both is a zero element
array([[False, False, True, True, False],
[False, True, True, True, True],
[ True, True, False, False, True],
[False, True, True, False, False],
[False, False, False, True, False]])

现在如果你想进一步使用它(根据你的评论)你可以像这样使用它:

# fill up the array with np.nan because zero could be a possible 
# outcome and we can not differentiate if we missed that item or we wrote a
# zero to this position. Later we can check if all np.nan´s are gone.
skor = np.full(a.shape,np.nan)

skor[con2] = -np.abs(a[con2]-b[con2])

my_min = np.minimum(a,b)
my_max = np.maximum(a,b)
skor[con3] = my_min[con3]/my_max[con3]

skor[con1] = 0

assert not np.any(skor==np.nan)
skor
>>> array([[-2. , 0. , 1. , 1. , -2. ],
[-1. , 1. , 1. , 0.5, 1. ],
[ 0.5, 1. , -2. , -2. , 0.5],
[ 0. , 0.5, 0.5, -1. , -1. ],
[-2. , -1. , -1. , 1. , -1. ]])

关于python - 通过 if 条件在二维数组之间进行元素明智的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57555157/

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