【问题标题】:Efficiently update values held in scoring matrix有效更新评分矩阵中的值
【发布时间】:2014-10-20 10:31:22
【问题描述】:

我不断计算相关矩阵,其中每次基础数据的顺序都是随机的。当随机数据的相关性分数大于或等于使用有序数据确定的原始相关性时,我想用 +1 更新评分矩阵中的相应单元格。 (评分矩阵中的所有单元格都从零开始)。

由于我正在处理shape = (3681, 12709) 的矩阵的大小,我想找到一种有效的方法来执行此操作。到目前为止,我所拥有的效率低下并且花费的时间太长。我想知道是否有一种矩阵操作风格的方法来解决这个问题,而不是像我目前在下面那样进行迭代:

for i, j in product(data_sorted.index, data_sorted.columns):

    # if random correlation is as good as or better than sorted correlation
    if data_random.loc[i, j] >= data_sorted.loc[i, j]:

        # update scoring matrix
        scoring_matrix[sorted_index_list.index(i)][sorted_column_list.index(j)] += 1

我粗略地计算了这种方法的时间,发现对矩阵的单行执行此操作大约需要 4.2 秒,这似乎太长了。

他将非常感激任何帮助。

【问题讨论】:

  • 初步猜测,将sorted_index_listsorted_column_list 转换为字典可能会有所帮助,因为您将能够更快地查找ij 各自的位置。
  • scoring_matrix 与您的数据相关的形状是什么?
  • 大家好。 Marius,谢谢,我会试一试并报告我的发现。 @chrisb score_matrix 与数据具有相同的形状,即对于数据中的每个单元格(将保存在一对变量之间测量的相关系数得分),评分矩阵中都有一个单元格。

标签: python numpy matrix pandas


【解决方案1】:

假设所有内容都具有相同的索引,这应该可以按预期工作并且非常快。

scoring_matrix += (data_random >= data_sorted).astype(int)

【讨论】:

  • 你先生是这个答案世界上最伟大的人。我的手术时间从几小时缩短到几秒钟。标记为正确。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
  • 1970-01-01
  • 2020-04-29
  • 2021-04-08
  • 1970-01-01
相关资源
最近更新 更多