通过对自身执行计算从 1dim numpy 数组创建一个 numpy 矩阵?

Creating a numpy matrix from a 1dim numpy array by performing computation on itself?

我有一个形状为 (100000,) 的 numpy 数组 'arr'。我需要创建一个形状为 100000X100000 的 numpy 矩阵 'res_matrix' 这样

for i in range(res_matrix.shape[0]):
    for j in range(res_matrix.shape[1]):
        res_matrix[i][j]= arr[i]*arr[j]

样本input/output


arr=[1 2 4]


Output:
res_matrix:

[[1 2 4]
 [2 4 18]
 [4 8 16]]

有没有办法把这个操作向量化,减少循环计算00000X100000的计算时间?

有几种方法可以获得外乘法。

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

#Using Multiply outer
print(np.multiply.outer(arr, arr)) #As suggested by Warren

#Using broadcasting
print(arr[:,None] * arr[None,:]) #(3,1) * (1,3)
[[ 1  2  4]
 [ 2  4  8]
 [ 4  8 16]]

[[ 1  2  4]
 [ 2  4  8]
 [ 4  8 16]]

请注意,输出仍然是一个非常大的矩阵,用于存储在内存中。根据您的需要,我建议您考虑生成器函数之类的东西。让我知道你将如何使用这个矩阵,我可以建议更多内存效率的方法。