Numpy设置j,j + 1,j + 2到a

时间:2012-11-07 00:16:07

标签: python numpy

是否有一种短代码有效的方法将两个阵列“粘合”在一起,这样如果阵列的长度不同,那么粘合的产品必须使得较长的值填充在较小的值之间,直到新的值为止。产品长度与两个数组长度的总和相同?或者:有没有办法创建一个数组,其中x = [ajjjbjjj],也就是说,获取具有值[ab]的数组,通过在该数组的每个元素之间填充3个j来创建一个新的:[ajjjb ]

有一种显而易见的方法可以通过循环来实现这一点,因为我事先知道产品的大小,但我怀疑手头必须有一个更“numpyic”的解决方案。

当我想要“粘合”的两个数组具有相同的大小并且产品是[a j b j c j]时,很容易做到,即可以在其中看到所有其他数据:

np.append(np.zeros((10,1)),np.ones((10,1)),1).reshape(2*10)
array([ 0.,  1.,  0.,  1.,  0.,  1.,  0.,  1.,  0.,  1.,  0.,  1.,  0.,
    1.,  0.,  1.,  0.,  1.,  0.,  1.])
but you cannot do
np.append(np.zeros((10,1)),np.ones((20,1)),1).reshape(20+10)

如果问题不够明确,我道歉,请告诉我哪些部分可以澄清,我的英语已经破了。

1 个答案:

答案 0 :(得分:0)

假设len(A) == nlen(B) == N以及Nn的倍数,即有一些m整数N = m*n,你可以这样做:

import numpy as np
A = np.zeros(10)
B = np.ones(20)

n = len(A)
C = np.concatenate([A.reshape(n, 1), B.reshape(n, -1)], axis=1)
C = C.ravel()

这几乎就是你在问题中所拥有的,但诀窍是将B重塑为(n,m)而不是(N,1),即(10,2)而不是(20,1)案件。 -1中的reshape是“无论什么能让它发挥作用”的简称,这是一种懒惰的做法B.reshape(n, len(B)//n)

基于你的问题,似乎数组B可能只是同质数组(即all(B == j)),在这种情况下你可以这样做:

import numpy as np
A = np.zeros(10)
j = 1.

C = np.zeros([10, 3])
C[:, 0] = A
C[:, 1:] = j
C = C.ravel()