高效搜索矩阵

时间:2017-11-04 11:36:03

标签: python numpy matrix scipy

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矩阵。

2 个答案:

答案 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)]