2016-07-29 63 views
2

我有一个数组,例如p = [2,3,2,4]和一个数字,比如n = 4。我需要根据模式p,n-p生成一个1和0的数组。那就是每个元素,在p中,有u个,后面是n-u个零。使用np.insert操作很容易做到这一点。但theano没有任何插入操作。没有使用循环可以实现这一点吗?另外,给定多个这样的ps和相应的ns,是否可以在不使用循环的情况下生成1和0模式? 下面是一个例子:P的根据模式numpy重复数字

p = [2,3,2,4,1], n=4 
n-p = [2,1,2,0,3] 
result = [1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,0] 

多个值::P的 1值。在这种情况下,所有的p的将具有相同的尺寸(p是2D阵列)

p = [[2,3,2,4,1],[2,2,3,5,4]], n = [4, 5] 
n-p = [[2,1,2,0,3],[3,3,2,0,1]] 
result = [[1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0],[1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0]] 

请注意,我“末已经填补的结果[0]以0到匹配结果[0]的尺寸,并导致[1]

+0

你可以发布输出吗? –

回答

3
p = numpy.array([2, 3, 2, 4]) 
n = 4 
result = (p[:, None] > numpy.arange(n)).ravel().astype(int) 

我们比较

[[2] 
[3] 
[2] 
[4]] 

[0 1 2 3]得到一个布尔值数组,然后将其平滑并将其转换为整数以获得所需的输出。

+0

是否可以将其扩展为二维情况?那是什么时候给出多个p数组? – Aditya369

+0

@ Aditya369:我不知道。确定不同'n'值的长度似乎很难以有效的方式进行。 – user2357112

+0

是不是可以用p填充p本身的数组?或者将这些元素设置为更大数组的值?因为如果n = [4,5]和p.shape [1] = 4,我们知道最大尺寸将是5 * 4 = 20。所以我们创建一个大小为二维的数组(p.shape [0],20)并将结果设置到这个数组中? – Aditya369