Numpy:频率阵列到分发

Rad*_*led 0 python arrays indexing numpy frequency

在使用numpy的python中,转换数组的最快方法是什么

array([0,2,3,1,0,0,1])
Run Code Online (Sandbox Code Playgroud)

到另一个数组

array([1,1,2,2,2,3,6])
Run Code Online (Sandbox Code Playgroud)

其中第一个数组给出每个索引的频率(即索引0的频率为0,索引1的频率为2,索引2的频率为3,依此类推),第二个数组重复每个索引的次数为在第一个数组中指定.

背景:我使用它来'enflate'(我找不到任何更好的词)a a kby kMatrix M(稀疏或不稀疏)给定长度k频率向量f:

f  = np.array([0,2,3,1,0,0,1])
f_ = np.array([1,1,2,2,2,3,6])
M_ = M[f_[:,None],f_]
Run Code Online (Sandbox Code Playgroud)

Div*_*kar 5

np.repeat在覆盖输入数组长度的范围数组上使用数组本身进行重复计数 -

np.repeat(np.arange(len(a)), a)
Run Code Online (Sandbox Code Playgroud)

样品运行 -

In [109]: a
Out[109]: array([0, 2, 3, 1, 0, 0, 1])

In [110]: np.repeat(np.arange(len(a)), a)
Out[110]: array([1, 1, 2, 2, 2, 3, 6])
Run Code Online (Sandbox Code Playgroud)