我有一个形状为(100000,)的数值数组'arr‘。我需要创建一个形状为100000X100000的数值矩阵'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]
样本输入/输出
arr=[1 2 4]
Output:
res_matrix:
[[1 2 4]
[2 4 18]
[4 8 16]]
有没有办法将这个操作矢量化,减少循环计算00000X100000的计算时间?
发布于 2021-01-07 00:07:55
有几种方法可以获得外部乘法。
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]]
注意,输出仍然是一个非常大的矩阵,用于存储在内存中。根据你需要它的用途,我建议你考虑一些像生成器函数这样的东西。让我知道你将如何使用这个矩阵,我可以建议更多的内存效率方法。
https://stackoverflow.com/questions/65599109
复制相似问题