通过对自身执行计算从 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]]
请注意,输出仍然是一个非常大的矩阵,用于存储在内存中。根据您的需要,我建议您考虑生成器函数之类的东西。让我知道你将如何使用这个矩阵,我可以建议更多内存效率的方法。
我有一个形状为 (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]]
请注意,输出仍然是一个非常大的矩阵,用于存储在内存中。根据您的需要,我建议您考虑生成器函数之类的东西。让我知道你将如何使用这个矩阵,我可以建议更多内存效率的方法。