Numpy子矩阵(选择随机索引)计算性能

时间:2017-02-03 06:14:17

标签: python numpy matrix-multiplication

我尝试使用Numpy计算子矩阵。

矩阵的形状是

答:(15000,100)

B:(15000,100)

B_:(3000,100)

C:(100,100)

sample_index = np.random.choice(np.arange(int(15000*0.2)), size=int(int(15000*0.2)), replace=False)

,第一个代码是

for ki in range(100):
    self.A[sample_index, k] += B_[:, k] - np.dot(self.A[sample_index, : ], C[:, k])

仅使用从sample_index

切片的子矩阵

,第二个代码是

for k in range(100):
    self.A[:, k] += B[:, k] - np.dot(self.A[:, : ], C[:, k])

使用所有矩阵。

但是第一个代码的计算时间比第二个代码慢。

你知道加速的任何理由或解决方案吗?

1 个答案:

答案 0 :(得分:0)

您实际上正在复制输入矩阵。如果您只是阅读输入,则无需复制。

import numpy as np
a = np.random.rand(10000).reshape(100, 100)
b = np.random.rand(10000).reshape(100, 100)
i = list(range(10))
a_sub0 = a[:10] # view
a_sub1 = a[i] # copying

# you can change the original matrix from the view
a_sub0[0, 0] = 100
(a[0, 0] == 100.0) and (a_sub1[0, 0] != 100.0) # True