2016-09-14 15 views
2

私は2つの配列x1とx2を持っています。どちらも1 * 14配列です。それらを解凍してから再フォーマットしようとしています。新しい配列の合計サイズは変更しないでください

コードは以下のとおりです。

x1 

OUT [122]:配列([1、2、3、1、5、6、5、5、6、7、8、9、7、9])

x2 

OUT [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

結果は配列がzipオブジェクトのPython 3であると仮定します。

あなたはlistを呼び出す必要がアイテムzip形式:Pythonの2で

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]] 

を、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]] 
関連する問題