gpt4 book ai didi

python - numpy数组中每个元素之间的差异

转载 作者:行者123 更新时间:2023-12-05 01:10:23 25 4
gpt4 key购买 nike

如果我有一个包含 4 个整数的数组

[a,b,c,d]

我想要每个元素与另一个元素之间的差异,结果如下所示:

[a-b, a-c, a-d,b-c,b-d,c-d]

符号确实很重要,我尝试移动数组,但应该有更好的方法来做到这一点,因为这似乎是我忘记的一些数学问题。

import numpy as np

array_1 = np.array([1,2,3,4])

array_2 = np.copy(array_1)
array_2 = np.roll(array_2,-1)
array_2[-1] = 0

array_3 = np.copy(array_2)
array_3 = np.roll(array_3,-1)
array_3[-1] = 0

result_1n2 = array_1-array_2
result_1n3 = array_1-array_3
result_last = array_1[0] - array_1[-1]

array_result = [result_1n2[0],result_1n3[0], result_last, result_1n2[1], result_1n3[1], result_1n2[2]]

print(array_result)

[-1, -2, -3, -1, -2, -1]

我应该如何处理这个问题?

最佳答案

numpy

对于每个元素,您都想减去它之后的元素。您可以使用 np.trui_indices 获取此索引.剩下的只是减法:

a, b = np.triu_indices(4, 1)
result = array_1[a] - array_1[b]

triu_indices 的第二个参数将您向上移动一个对角线。默认为 0,其中包括主对角线的索引:

>>> a
array([0, 0, 0, 1, 1, 2], dtype=int64)
>>> b
array([1, 2, 3, 2, 3, 3], dtype=int64)

>>> array_1[a]
array([1, 1, 1, 2, 2, 3])
>>> array_1[b]
array([2, 3, 4, 3, 4, 4])

>>> result
array([-1, -2, -3, -1, -2, -1])

如果您需要按 b 而不是 a 排序的输入,请使用 np.tril_indices :

b, a = np.tril_indices(4, -1)

itertools

您可以使用 itertools.combinations 完成相同的操作:

result = [a - b for a, b in itertools.combinations(array_1, 2)]

如果需要,将结果包装在一个数组中。

关于python - numpy数组中每个元素之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64071016/

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