在numpy中生成沿沿着的计数?

zrfyljdw  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(81)

我想知道是否有一个numpy的方式来做以下多轴:
所需输入:

np.array([[1,2,3],
          [4,5,5]])

预期输出:

np.array([[0,1,1,1,0,0],
          [0,0,0,0,1,2]])

第二个阵列的第二行中的2表示第一个阵列的第二行中存在2个5。
如果没有,我就只能去了。

wz3gfoph

wz3gfoph1#

假设a输入并使用广播:

out = (a[...,None] == np.arange(np.max(a)+1)).sum(axis=1)

或者按照注解中的建议使用循环和bincount

N = a.max()+1
out = np.array([np.bincount(x, minlength=N) for x in a])

输出量:

array([[0, 1, 1, 1, 0, 0],
       [0, 0, 0, 0, 1, 2]])
tmb3ates

tmb3ates2#

另一种可能的解决方案,基于pandas

(pd.concat(
    [x.value_counts(sort=False) for _,x in pd.DataFrame(a).iterrows()], axis=1)
 .reindex(range(np.max(a)+1)).fillna(0).T.astype(int).values)

输出量:

array([[0, 1, 1, 1, 0, 0],
       [0, 0, 0, 0, 1, 2]])

相关问题