2017-02-15 18 views
0

我有一個數組:通過元件不同的陣列替換元件

a = np.array([1,2,3,4,5,6,7,8])

陣列可以重新成形爲a = np.array([[1,2,3,4],[5,6,7,8]]),無論是更方便。

現在,我有一個數組:

b = np.array([[11,22,33,44], [55,66,77,88]]) 

我要替換到每個這些元件從相應的元件。

a數組將始終擁有與b一樣多的元素。

所以,數組b將是:

[1,2,3,4],[5,6,7,8]

注意,我必須每個B子陣列尺寸保持到(4,)。我不想改變它。因此,idx將取值爲0 to 3。我想讓a適合every four values

我掙扎着重塑,分裂,面具..等,我想不出辦法做到這一點。

import numpy as np 

#a = np.array([[1,2,3,4],[5,6,7,8]]) 
a = np.array([1,2,3,4,5,6,7,8]) 


b = np.array([[11,22,33,44], [55,66,77,88]]) 

for arr in b: 
    for idx, x in enumerate(arr): 
     replace every arr[idx] with corresponding a value 
+0

無法你只是使用D作爲替代? – languitar

+0

@languitar:不,如我所說,我會有一個循環,直到它變成形狀(4,),然後我想做替換。 – George

+0

「我想用這些數組替換這些數組中的相應元素。」這是一個不明確的說法。怎麼樣? 「相應」是什麼意思?它是否總是正確的?len(b)== len(c),len(a)== 2 * len(b)'? –

回答

1

以下爲我工作:

i = 0 
for arr in b: 
    for idx, x in enumerate(arr): 
     arr[idx] = a[i] 
     print(arr[idx]) 
     i += 1 

輸出(ARR [IDX):1 2 3 4 5 6 7 8 如果鍵入print(b)它會輸出[[1 2 3 4] [5 6 7 8]]

+0

謝謝!簡單:)。(upvoted) – George

0

b = a[:len(a)//2] c = a[len(a)//2:]

2

對於您目前的情況下,你想要的可能是:

b, c = list(a.reshape(2, -1))

這是不乾淨的,但它是一個班輪。與第一維度2把你的一維數組二維數組與reshape(2, -1),然後list分裂它沿着第一個維度,這樣就可以直接將它們分配給b, c

您也可以與專業功能做numpy.split

b, c = np.split(a, 2)

編輯:基於公認的解決方案,量化的方式來做到這一點是

b = a.reshape(b.shape)

+0

不錯,謝謝,但是我在[這種情況](http://pastebin.com/hHECNdHf)中可以做什麼(我編輯了我的文章) – George

+0

感謝您的解決方案。(upvoting) – George

+0

看不到您的pastebin,但如果你總是想分成兩半,你會希望'b = a.reshape(2,-1)'。如果你總是需要4個元素(而len(a)總是可以被4整除),你可以做'b = a.reshape(-1,4)' –

0

嗯,我很新的Python,但是這個工作對我來說:

for i in range (0, len(a)//2): 
     b[i] = a[i] 
    for i in range (len(a)//2,len(a)): 
     c[i-4] = a[i] 

通過打印3個陣列我有以下的輸出:

[1 2 3 4 5 6 7 8] 
[1 2 3 4] 
[5 6 7 8] 

但我會去丹尼爾的解決方案(拆分的):1班輪,使用numpy API,...

+0

嗨,我編輯了我的帖子。事情是,我必須在同一時間只取代b數組(在後編輯) – George

+0

我增加了另一個答案,以獲得更多的清晰度;) – Alastard