2012-11-07 57 views
0

是否存在將兩個數組「粘合」在一起的短代碼高效方式,這樣如果數組的長度不同,則粘貼的產品必須是在較小的值之間填充較長的值,直到新產品的長度與兩個數組長度的總和相同爲止?或者:有沒有辦法創建一個數組,其中x = [ajjjbjjj],也就是說,將具有值[ab]的數組,通過在該數組的每個元素之間填充3個j來創建一個新數組,以獲得:[ajjjb ]numpy將j,j + 1,j + 2設置爲

由於我事先知道產品的大小,因此有一個明顯的方法可以做到這一點,但我懷疑手頭必須有更多的「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) 

我道歉如果問題不夠清楚,請告訴我可以澄清哪些部分,我的英語是否被打破。

+0

你會喜歡的結果在第二種情況下(最後一行代碼)看起來像? – Bitwise

+0

0 1 1 0 1 1 0 1 1等等,基本上是因爲有長度的兩倍,然後總長度爲3,那麼爲了達到這個長度,向量3必須從每個零之間的值中填入兩個值。我希望將其推廣到其中一個(或任何其他向量)大N倍的情況,那麼必須在每個零值(或任何其他向量)之間填充N個值。 – arynaq

+0

當一個數組大小爲10而另一個數組爲15時會發生什麼? – Bitwise

回答

0

假設len(A) == nlen(B) == NNn的倍數,即有一些整數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)。 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() 
相關問題