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

jpc*_*dre 3 python numpy bigdata

我有两个向量,v1v2。我想v2从的每个值中减去的每个值v1并将结果存储在另一个向量中。我也想使用非常大的向量(例如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])
Run Code Online (Sandbox Code Playgroud)

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

Rog*_*Fan 5

您提到的巨型阵列将不会带来很多乐趣。但是,如果矩阵的大小更合理(足够小以使结果适合内存),最好的方法是广播

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]]
Run Code Online (Sandbox Code Playgroud)