根据另一个数组中的值扩展一个numpy数组

问题描述 投票:1回答:3

我有以下numpy数组a = np.array([1,1,2,1,3]),应将其转换为以下数组b = np.array([1,1,1,1,1,1,1,1])

发生的情况是a数组中的所有非1值应该在b数组中扩展为在a数组中定义的倍数。简单地说,2应该变成2个3应该变成3个

坦白说,我找不到执行此操作的numpy函数,但我确定存在。任何建议将非常欢迎!谢谢!

python numpy
3个回答
1
投票

我们可以简单地做-

np.ones(a.sum(),dtype=int)

由于求和,因此将容纳所有数字:1s和非1s,因此为我们提供了所需的输出。


0
投票

这是根据您想重复的数字的一种可能方法:

In [12]: a = np.array([1,1,2,1,3])
In [13]: mask = a != 1
In [14]: np.concatenate((a[~mask], np.repeat(1, np.prod(a[mask]))))
Out[14]: array([1, 1, 1, 1, 1, 1, 1, 1, 1])

0
投票
In [71]: np.ones(len(a),int).repeat(a)                                          
Out[71]: array([1, 1, 1, 1, 1, 1, 1, 1])

对于这个小例子,它比np.ones(a.sum(),int)快,但缩放性也不太好。但总体而言两者都很快。

© www.soinside.com 2019 - 2024. All rights reserved.