0

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

由于我事先知道产品的大小,因此有明显的方法可以通过循环执行此操作,但我怀疑手头必须有一个更“numpyic”的解决方案。

当我想“粘合”的两个数组大小相同并且产品是 [ajbjcj] 时,这很容易做到,即每个其他数组,如下所示:

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)

如果问题不够清楚,我深表歉意,请告诉我可以澄清哪些部分,我的英语不好。

4

1 回答 1

0

假设len(A) == nand是 的倍数len(B) == N,即有一个整数,这样, 你可以这样做:NnmN = 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) 在这种情况下。-1inreshape是“whatever will make it work”的简写,它是一种懒惰的做事方式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()
于 2012-11-07T00:58:12.903 回答