【问题标题】:Creating a numpy matrix from a 1dim numpy array by performing computation on itself?通过对自身执行计算从 1dim numpy 数组创建 numpy 矩阵?
【发布时间】:2021-04-12 09:31:04
【问题描述】:

我有一个形状为 (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]

示例输入/输出


arr=[1 2 4]


Output:
res_matrix:

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

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

【问题讨论】:

  • np.multiply.outer(arr, arr)
  • 你也可以使用广播

标签: python-3.x pandas numpy vectorization


【解决方案1】:

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

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]]

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

【讨论】:

    猜你喜欢
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多