python 稀疏矩阵获取最大值和索引
python sparse matrix get maximum values and index
我有一个稀疏矩阵A(稠密等于10 * 3),如:
print type(A)
<class scipy.sparse.csr.csr_matrix>
print A
(0, 0) 0.0160478743808
(0, 2) 0.0317314165078
(1, 2) 0.0156596521648
(1, 0) 0.0575683686558
(2, 2) 0.0107481166871
(3, 0) 0.0150580924929
(3, 2) 0.0297743235876
(4, 0) 0.0161931803955
(4, 2) 0.0320187296788
(5, 2) 0.0106034409766
(5, 0) 0.0128109177074
(6, 2) 0.0105766993238
(6, 0) 0.0127786088452
(7, 2) 0.00926522256063
(7, 0) 0.0111941023699
每列的最大值为:
print A.max(axis=0)
(0, 0) 0.0575683686558
(0, 2) 0.0320187296788
我想获取对应于列值的索引。
我知道 A.getcol(i).tolist()
会 return 列出每列,允许我使用 argmax() 函数,但这种方式真的很慢。请问有什么下降的方法吗?
这是您在问题中建议的方法的细微变化:
col_argmax = [A.getcol(i).A.argmax() for i in range(A.shape[1])]
(.A
属性等同于 .toarray()
。)
一个可能更有效的替代方案是
B = A.tocsc()
col_argmax = [B.indices[B.indptr[i] + B.data[B.indptr[i]:B.indptr[i+1]].argmax()] for i in range(len(B.indptr)-1)]
以上都行,但我不得不问:如果你的数组有形状 (10, 3),你为什么要使用稀疏矩阵? (10, 3) 很小!只需使用常规的密集 numpy 数组即可。
即使您将 A
保留为稀疏矩阵,计算该大小矩阵列的 argmax 的最有效方法可能只是将其转换为密集数组并使用 argmax 方法:
col_argmax = A.A.argmax(axis=0)
获取每个矩阵列中的 max 和 argmax 值的更有效方法是简单地使用 scipy.sparse native 函数:
每个矩阵列中 A 的最大值:
max_values = A.max(axis=0)
每个矩阵列中 A 的最大 arg:
max_args = A.argmax(axis=0)
计算每个矩阵行中的最大值和arg max(使用axis=1)或计算所有矩阵的最大值和arg max(使用轴=None).
我有一个稀疏矩阵A(稠密等于10 * 3),如:
print type(A)
<class scipy.sparse.csr.csr_matrix>
print A
(0, 0) 0.0160478743808
(0, 2) 0.0317314165078
(1, 2) 0.0156596521648
(1, 0) 0.0575683686558
(2, 2) 0.0107481166871
(3, 0) 0.0150580924929
(3, 2) 0.0297743235876
(4, 0) 0.0161931803955
(4, 2) 0.0320187296788
(5, 2) 0.0106034409766
(5, 0) 0.0128109177074
(6, 2) 0.0105766993238
(6, 0) 0.0127786088452
(7, 2) 0.00926522256063
(7, 0) 0.0111941023699
每列的最大值为:
print A.max(axis=0)
(0, 0) 0.0575683686558
(0, 2) 0.0320187296788
我想获取对应于列值的索引。
我知道
会 return 列出每列,允许我使用 argmax() 函数,但这种方式真的很慢。请问有什么下降的方法吗?A.getcol(i).tolist()
这是您在问题中建议的方法的细微变化:
col_argmax = [A.getcol(i).A.argmax() for i in range(A.shape[1])]
(.A
属性等同于 .toarray()
。)
一个可能更有效的替代方案是
B = A.tocsc()
col_argmax = [B.indices[B.indptr[i] + B.data[B.indptr[i]:B.indptr[i+1]].argmax()] for i in range(len(B.indptr)-1)]
以上都行,但我不得不问:如果你的数组有形状 (10, 3),你为什么要使用稀疏矩阵? (10, 3) 很小!只需使用常规的密集 numpy 数组即可。
即使您将 A
保留为稀疏矩阵,计算该大小矩阵列的 argmax 的最有效方法可能只是将其转换为密集数组并使用 argmax 方法:
col_argmax = A.A.argmax(axis=0)
获取每个矩阵列中的 max 和 argmax 值的更有效方法是简单地使用 scipy.sparse native 函数:
每个矩阵列中 A 的最大值:
max_values = A.max(axis=0)
每个矩阵列中 A 的最大 arg:
max_args = A.argmax(axis=0)
计算每个矩阵行中的最大值和arg max(使用axis=1)或计算所有矩阵的最大值和arg max(使用轴=None).