Python 3.x 通过对自身执行计算,从1dim numpy数组创建numpy矩阵?
我有一个形状为(100000,)的numpy数组“arr”。我需要创建一个形状为10000x100000的numpy矩阵“res_矩阵”,以便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
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]]