我想在scipy.sparse矩阵X
的一个轴上同时获取argmax和max。
>>> type(X)
scipy.sparse.csr.csr_matrix
>>> idx = X.argmax(axis=0)
>>> maxes = X.max(axis=0)
我不想计算最大值两次,但我不能像
X
是np.ndarray一样使用相同的方法。我该如何将argmax的索引应用于X
?我想在scipy.sparse矩阵X
的一个轴上同时获取argmax和max。
>>> type(X)
scipy.sparse.csr.csr_matrix
>>> idx = X.argmax(axis=0)
>>> maxes = X.max(axis=0)
X
是np.ndarray一样使用相同的方法。我该如何将argmax的索引应用于X
?我通过改进你提供的方法,成功地实现了你想要的结果:
from scipy.sparse import csr_matrix
a = [[4, 0, 0], [0, 3, 0], [0, 0, 1]]
a = csr_matrix(a)
idx = a.argmax(axis=0)
m = a.shape[1]
a[idx,np.arange(m)[None,:]].toarray()
输出:
array([[4, 3, 1]], dtype=int32)
idx
超出了不同的轴。无论如何,这实际上会慢一些。稀疏矩阵索引不像密集等价物那样快速。 - hpauljnp.array
然后执行argmax
和max
会更快。 - Hemerson Tacon
argmax
的底层代码以返回索引和值。但除此之外,我怀疑这种双重评估会是最快的。你不能简单地将密集数组的直觉转移到稀疏数组上。 - hpauljargmax
使用indptr
在矩阵的行上进行迭代,然后找到该行的最大值。这在概念上很简单,但有可能该行全为0,或者0本身是最小值或最大值。使用lil
格式时,可更容易地将矩阵的行可视化。 - hpaulj