2016-09-14 48 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]] 
相关问题