【问题标题】:How to select the maximum value over all rows from a list of scipy.sparse.arrays?如何从 scipy.sparse.arrays 列表中选择所有行的最大值?
【发布时间】:2012-06-28 04:42:31
【问题描述】:

考虑一个带有浮点类型条目的nscipy.sparse.arrays 列表。我正在使用 in Compressed Sparse Row format 结构。

my_list = [sparse_array_1, sparse_array_2, ... , sparse_array_n]

每个 sparse_array_i 的长度相同。

我想要生成的是每行最大值的列表。所以这个例子

[array[0,  array[4,       array[88,
       3,        2,             287,
       99,        1234,         0,
       3],       0],            77]

会导致

[88, 287, 1324, 77]

这可能以pythonic方式吗?

【问题讨论】:

    标签: python list numpy selection


    【解决方案1】:

    我不熟悉 scipy 稀疏数组,但如果它们的行为与其他 python iterables 一样,那么 mapzip 的组合将达到您想要的效果:

    >>> arr
    [[0, 3, 99, 3], [4, 2, 1234, 0], [88, 287, 0, 77]]
    >>> zip(*arr)
    [(0, 4, 88), (3, 2, 287), (99, 1234, 0), (3, 0, 77)]
    >>> map(max, zip(*arr))
    [88, 287, 1234, 77]
    

    【讨论】:

      【解决方案2】:

      这是两个稀疏矩阵的答案:重复 n-1 次。

      import numpy as np
      def spmax(X,Y):
         # X,Y two csr sparse matrices
         sX = X.copy(); sX.data[:] = 1
         sY = Y.copy(); sY.data[:] = 1
         sXY = sX+sY; sXY.data[:] = 1
         X = X+sXY; X.data = X.data-1
         Y = Y+sXY; Y.data = Y.data-1
         maxXY = X.copy()
         maxXY.data = np.amax(np.c_[X.data,Y.data],axis=1)
         return maxXY
      

      虽然这很慢。希望他们会在某个时候在 scipy.sparse 中实现这一点。这是一个非常基本的操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-03
        • 2022-01-14
        • 2018-10-06
        • 1970-01-01
        • 1970-01-01
        • 2018-12-16
        • 2014-02-26
        • 1970-01-01
        相关资源
        最近更新 更多