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

时间:2019-11-08 19:36:07

标签: python numpy

我有以下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函数,但我确定存在。任何建议将非常欢迎!谢谢!

3 个答案:

答案 0 :(得分:2)

我们可以简单地做-

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

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

答案 1 :(得分:1)

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)更快,但扩展性也不太好。但是总体来说两者都很快。

答案 2 :(得分: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])