我试图找出稀疏矩阵中每一行的最小元素的位置和值。下面给出了一个简单的例子:这里,我们有一个3x 6的稀疏矩阵“M.”
H = np.array([[1, 2, 3, 0, 4, 0 ,0],
[0, 5, 0, 6, 0, 0 ,0],
[0, 0, 0, 7, 0, 0 ,8], dtype = np.float32)
M = scipy.sparse.csr_matrix(H)
然后,我想得到的是每一行的非零最小元素。对于上面的例子:
min_elements = some_function(M,axis = 0)
方法M.min(axis=0)
不适用于我的情况,因为每行的最小元素都是零,因此返回全零数组。
因此,有没有一种有效的方法可以使用稀疏矩阵以计算效率高的方式实现这样的功能。在我的一般情况下,稀疏矩阵将非常巨大,需要大量的额外计算。因此,性能/速度是我的主要基准。
谢谢你,谢谢你
2条答案
按热度按时间55ooxyrt1#
M
存储为:我们可以在由
indptr
定义的切片上迭代,并取min:这可以简化一点,但它给出了基本的想法。
用
lil
来描述所发生的事情可能更容易:以前的SO要求按行提供最小(或最大)N值。
稀疏矩阵最适合用矩阵乘法来表示,包括行(或列)和,甚至
csr
索引也是用矩阵乘法来完成的,其他的逐行运算就不那么容易了。l7mqbcuq2#
你可以翻转所有的数据,找到最大值。这是假设你所有的数据都是正数,就像例子中的那样。
在您的示例中,我得到了输出
这里有一些可怕的数字错误,但如果你愿意
round
你的答案...编辑:如果你在追求指数,并想做
M_inv.argmax(axis=1)
,这种方法可能是可取的,否则它可能不是最好的。