Python 基于另一个数组中的值展开numpy数组

Python 基于另一个数组中的值展开numpy数组,python,numpy,Python,Numpy,我有下面的numpy数组a=np.array([1,1,2,1,3]),应该转换成下面的数组b=np.array([1,1,1,1,1,1,1]) 发生的情况是,a数组中的所有非1值应在b数组中展开到a数组中定义的倍数。更简单地说,2应该变成2,而3应该变成3 坦白地说,我找不到一个numpy函数来实现这一点,但我肯定有一个函数存在。欢迎您提供任何建议!谢谢大家! 根据你想重复的次数,这里有一种可能的方法: In [12]: a = np.array([1,1,2,1,3]) In [13]:

我有下面的numpy数组
a=np.array([1,1,2,1,3])
,应该转换成下面的数组
b=np.array([1,1,1,1,1,1,1])

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


坦白地说,我找不到一个numpy函数来实现这一点,但我肯定有一个函数存在。欢迎您提供任何建议!谢谢大家!

根据你想重复的次数,这里有一种可能的方法:

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])
我们可以做得很简单-

np.ones(a.sum(),dtype=int)
这将容纳所有数字:
1s
和非
1s
,这是因为求和,从而提供所需的输出

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)更快,但它的伸缩性不太好。但总的来说,两者都很快。

看看np。repeat@Divakar哦,天哪。。。我一定是在度假。谢谢你,非常乐意接受你的回答。