有没有一种短代码有效的方法将两个数组“粘合”在一起,这样如果两个数组的长度不同,那么粘合的乘积必须是这样的,即从较长的值填充到较小的值之间,直到新乘积的长度与两个数组的长度之和相同?或者:有没有一种方法可以创建一个数组,其中x=a j b j,也就是说,取具有值a b的数组,通过在该数组的每个元素之间填充3个j来创建一个新数组,以获得:a j b
有一种显而易见的循环方式,因为我事先知道产品的大小,但我怀疑手头一定有更“数字”的解决方案。
当我想要“粘合”的两个数组的大小相同,而乘积是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)如果问题不够清楚,我很抱歉,请告诉我可以澄清的部分,我的英语不好。
发布于 2012-11-07 08:58:13
假设len(A) == n、len(B) == N和N是n的倍数,即有一些整数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) ie (10,2)而不是(20,1)。reshape中的-1是“任何能让它工作的东西”的缩写,这是一种懒惰的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()https://stackoverflow.com/questions/13261455
复制相似问题