我尝试使用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])
使用所有矩阵。
但是第一个代码的计算时间比第二个代码慢。
你知道加速的任何理由或解决方案吗?
答案 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