我想知道是否有一个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。如果没有,我就只能去了。
wz3gfoph1#
假设a输入并使用广播:
a
out = (a[...,None] == np.arange(np.max(a)+1)).sum(axis=1)
或者按照注解中的建议使用循环和bincount:
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]])
tmb3ates2#
另一种可能的解决方案,基于pandas:
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)
2条答案
按热度按时间wz3gfoph1#
假设
a
输入并使用广播:或者按照注解中的建议使用循环和
bincount
:输出量:
tmb3ates2#
另一种可能的解决方案,基于
pandas
:输出量: