gpt4 book ai didi

Python:比较两个数组的所有元素并修改第二个数组

转载 作者:行者123 更新时间:2023-11-28 20:40:31 25 4
gpt4 key购买 nike

Python新手,一直在学习数组。我遇到了一个足够简单的问题,需要一个解决方案。我有两个数组:

a = [2.0, 5.1, 6.2, 7.9, 23.0]     # always increasing
b = [5.1, 5.5, 5.7, 6.2, 00.0] # also always increasing

我希望得到的数组是:

c = [0.0, 5.1, 6.2, 0.0, 0.0]      # 5.5, 5.7, 00.0 from 'b' were dropped and rearranged such that position of equivalent elements as in 'a' are maintained

我已经使用 Numpy 比较了 'a' 和 'b',如下所示:

y = np.isclose(a, b)
print y
# [False False False False False]

(或者,)我也尝试过类似的方法,这不是正确的方法(我认为):

c = np.zeros(len(a))
for i in range (len(a)):
for j in range (len(a)):
err = abs(a[i]-b[j])
if err == 0.0 or err < abs(1):
print (err, a[i], b[j], i, j)
else:
print (err, a[i], b[j], i, j)

我如何从这里开始获得“c”?

最佳答案

即使数组大小不同,这些解决方案也能奏效。

简单版

c = []

for i in a:
if any(np.isclose(i, b)):
c.append(i)
else:
c.append(0.0)

Numpy 版本

aa = np.tile(a, (len(b), 1))
bb = np.tile(b, (len(a), 1))
cc = np.isclose(aa, bb.T)
np.any(cc, 0)
c = np.zeros(shape=a.shape)
result = np.where(np.any(cc, 0), a, c)

解释:

我将在这里进行矩阵比较。首先将数组扩展为矩阵。交换长度,创建具有相同一维大小的矩阵:

aa = np.tile(a, (len(b), 1))
bb = np.tile(b, (len(a), 1))

它们看起来像这样:

# aa
array([[ 2. , 5.1, 6.2, 7.9, 23. ],
[ 2. , 5.1, 6.2, 7.9, 23. ],
[ 2. , 5.1, 6.2, 7.9, 23. ],
[ 2. , 5.1, 6.2, 7.9, 23. ],
[ 2. , 5.1, 6.2, 7.9, 23. ]])

# bb
array([[ 5.1, 5.5, 5.7, 6.2, 0. ],
[ 5.1, 5.5, 5.7, 6.2, 0. ],
[ 5.1, 5.5, 5.7, 6.2, 0. ],
[ 5.1, 5.5, 5.7, 6.2, 0. ],
[ 5.1, 5.5, 5.7, 6.2, 0. ]])

然后比较它们。注意bb是转置的:

cc = np.isclose(aa, bb.T)

你得到:

array([[False,  True, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, True, False, False],
[False, False, False, False, False]], dtype=bool)

您可以按轴 0 聚合:

np.any(cc, 0)

返回

array([False,  True,  True, False, False], dtype=bool)

现在创建数组 c:

c = np.zeros(shape=a.shape)

然后从 a 或 c 中选择合适的值:

np.where(np.any(cc, 0), a, c)

结果:

array([ 0. ,  5.1,  6.2,  0. ,  0. ])

关于Python:比较两个数组的所有元素并修改第二个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35682497/

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