从两个数组中减去所有值对

2024-05-18 15:20:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个向量,v1和{}。我想从v1的每个值中减去v2的每个值,然后将结果存储到另一个向量中。我还想使用非常大的向量(例如1e6大小),所以我认为我应该使用numpy来提高性能。在

到目前为止,我有:

import numpy
v1 = numpy.array(numpy.random.uniform(-1, 1, size=1e2))
v2 = numpy.array(numpy.random.uniform(-1, 1, size=1e2))
vdiff = []
for value in v1:
    vdiff.extend([value - v2])

这将创建一个包含100个条目的列表,每个条目都是一个大小为100的数组。我不知道这是不是最有效的方法。 我想用尽可能小的对象大小(按内存大小)快速计算1e4期望值。在


Tags: inimportnumpyforsizevaluerandomuniform
2条回答

np.subtract.outer

您可以将^{}^{}一起使用,然后转置:

a = np.array(range(5, 10))
b = np.array(range(2, 6))

res1 = np.subtract.outer(a, b).T
res2 = a[np.newaxis, :] - b[:, np.newaxis]

assert np.array_equal(res1, res2)

这两种方法的性能相当。在

你不会对你提到的巨型阵列很感兴趣。但是如果有更合理大小的矩阵(足够小,结果可以放入内存中),那么最好的方法是使用broadcasting。在

import numpy as np

a = np.array(range(5, 10))
b = np.array(range(2, 6))

res = a[np.newaxis, :] - b[:, np.newaxis]
print(res)
# [[3 4 5 6 7]
#  [2 3 4 5 6]
#  [1 2 3 4 5]
#  [0 1 2 3 4]]

相关问题 更多 >

    热门问题