2016-09-14 50 views
2

我有兩個數組x1和x2,都是1 * 14數組,我試圖壓縮它們然後執行重構。新數組的總大小必須保持不變

代碼如下;

x1 

缺貨[122]:陣列([1,2,3,1,5,6,5,5,6,7,8,9,7,9])

x2 

輸出[123]:陣列([1,3,2,2,8,6,7,6,7,1,2,1,1,3])

X = np.array(zip(x1, x2)).reshape(2, len(x1)) 

ValueErrorTraceback(最近的呼叫最後) in() ----> 1 X = np.array(zip(x1,x2))。reshape(2,len(x1))

ValueError:新陣列的總大小必須保持不變

回答

3

我假設你在Python 3中,其結果是一個帶有zip對象的數組。

請立即撥打了list拉鍊項目:

X = np.array(list(zip(x1, x2))).reshape(2, len(x1)) 
#   ^^^^ 
print(X) 
# [[1 1 2 3 3 2 1 2 5 8 6 6 5 7] 
# [5 6 6 7 7 1 8 2 9 1 7 1 9 3]] 

在Python 2,zip返回一個列表,而不是一個迭代器與Python 3中,和你以前的代碼將正常工作。

+0

謝謝你的交代,它可以完美運行。 – Sarang

3

你在Python 3中,因此zip被懶惰地評估。

>>> np.array(zip(x1,x2)) 
array(<zip object at 0x7f76d0befe88>, dtype=object) 

您需要遍歷它:

>>> np.array(list(zip(x1, x2))).reshape(2, len(x1)) 
array([[1, 1, 2, 3, 3, 2, 1, 2, 5, 8, 6, 6, 5, 7], 
     [5, 6, 6, 7, 7, 1, 8, 2, 9, 1, 7, 1, 9, 3]]) 
+0

謝謝,它的工作原理。 – Sarang

1

np.array是不承認由zip創建爲迭代發電機。如果強制轉換到一個列表首先,它工作得很好:

from array import array 
import numpy as np 
x1 = array('i', [1, 2, 3, 1, 5, 6, 5, 5, 6, 7, 8, 9, 7, 9]) 
x2 = array('i', [1, 3, 2, 2, 8, 6, 7, 6, 7, 1, 2, 1, 1, 3]) 
print(np.array(list(zip(x1, x2))).reshape(2, len(x1))) 

[[1 1 2 3 3 2 1 2 5 8 6 6 5 7] 
[5 6 6 7 7 1 8 2 9 1 7 1 9 3]] 
相關問題