Python 3.x 通过对自身执行计算,从1dim numpy数组创建numpy矩阵?

Python 3.x 通过对自身执行计算,从1dim numpy数组创建numpy矩阵?,python-3.x,pandas,numpy,vectorization,Python 3.x,Pandas,Numpy,Vectorization,我有一个形状为(100000,)的numpy数组“arr”。我需要创建一个形状为10000x100000的numpy矩阵“res_矩阵”,以便 for i in range(res_matrix.shape[0]): for j in range(res_matrix.shape[1]): res_matrix[i][j]= arr[i]*arr[j] 样本输入/输出 arr=[1 2 4] Output: res_matrix: [[1 2 4] [2 4

我有一个形状为(100000,)的numpy数组“arr”。我需要创建一个形状为10000x100000的numpy矩阵“res_矩阵”,以便

for i in range(res_matrix.shape[0]):
    for j in range(res_matrix.shape[1]):
        res_matrix[i][j]= arr[i]*arr[j]
样本输入/输出


arr=[1 2 4]


Output:
res_matrix:

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

是否有方法将此操作矢量化,以减少在循环中计算00000 x100000的计算时间?

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

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)

注意,输出仍然是一个非常大的矩阵,用于存储在内存中。取决于你需要它做什么,我建议你考虑一些像发电机的功能。让我知道你将如何使用这个矩阵,我可以建议使用更节省内存的方法。

np.multiply.outer(arr,arr)
你也可以使用广播
[[ 1  2  4]
 [ 2  4  8]
 [ 4  8 16]]

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