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