Y1=scipy.zeros((l,l))
y_test=scipy.zeros((l,l))
for i in range(0,l):
for j in range(0,l):
if y_score[i][j]>=0.1:
Y1[i][j]=1
for i in range(0,l):
for j in range(0,l):
if (Y1[i][j]==1) and (v[i][j]==1):
y_test[i][j]=1
我正在处理大型数据集,我必须搜索矩阵。在最坏的情况下,时间是O(n ^ 2)。使用numpy和scipy有更好更快的方法来执行上述任务吗?
输入为y_score,这是一个100,000X100,000 numpy数组,其值介于0和1之间。 v是具有相似尺寸的稀疏scipy矩阵。
答案 0 :(得分:0)
您可以简单地创建与比较相对应的蒙版,然后将它们转换为浮动(如果您需要在该dtype中)以获得所需的输出 -
mask = y_score >= 0.1
Y1 = mask.astype(float)
y_test = (mask & (v==1)).astype(float)
答案 1 :(得分:0)
我建议阅读Numpy的索引文档: https://docs.scipy.org/doc/numpy/user/basics.indexing.html
Numpy擅长批量操作。
您的示例可以简单地翻译为:
import scipy
l = 10
Y1 = scipy.zeros((l, l))
y_test = scipy.zeros((l, l))
y_score = scipy.random.rand(l, l)
v = scipy.random.randint(0, 2, (l, l))
Y1[y_score >= 0.1] = 1
y_test[(Y1 == 1) & (v == 1)]