我有兴趣尽快将numpy数组转换为稀疏字典.让我详细说明:
鉴于阵列:
numpy.array([12,0,0,0,3,0,0,1])
Run Code Online (Sandbox Code Playgroud)
我希望出版字典:
{0:12, 4:3, 7:1}
Run Code Online (Sandbox Code Playgroud)
如您所见,我们只是将序列类型转换为从非零值到其值的显式映射.
为了使这更有趣,我提供以下测试工具来尝试替代方案:
from timeit import Timer
if __name__ == "__main__":
s = "import numpy; from itertools import izip; from numpy import nonzero, flatnonzero; vector = numpy.random.poisson(0.1, size=10000);"
ms = [ "f = flatnonzero(vector); dict( zip( f, vector[f] ) )"
, "f = flatnonzero(vector); dict( izip( f, vector[f] ) )"
, "f = nonzero(vector); dict( izip( f[0], vector[f] ) )"
, "n = vector > 0; i = numpy.arange(len(vector))[n]; v = vector[n]; dict(izip(i,v))"
, …Run Code Online (Sandbox Code Playgroud) 假设我有以下内容numpy.ndarray:
array([[50, 0, 0],
[ 0, 3, 47],
[ 0, 36, 14]])
Run Code Online (Sandbox Code Playgroud)
如何将其转换为这种形式的字典:
{0: {0: 50}, 1: {1: 3, 2: 47}, 2: {1: 36, 2: 14}}
Run Code Online (Sandbox Code Playgroud)
这个问题类似于python 2d array to dict,但无论我多么努力地尝试,我都无法找到类似于那里的答案的解决方案。
python dictionary numpy type-conversion multidimensional-array