Python 新数组的总大小必须保持不变

Python 新数组的总大小必须保持不变,python,arrays,numpy,reshape,Python,Arrays,Numpy,Reshape,我有两个数组x1和x2,都是1*14数组,我正在尝试将它们压缩,然后执行重塑 代码如下: x1 Out[122]:数组([1,2,3,1,5,6,5,5,6,7,8,9,7,9]) Out[123]:数组([1,3,2,2,8,6,7,6,7,1,2,1,1,3]) ValueErrorTraceback(最近一次呼叫上次) 在() ---->1 X=np.数组(zip(x1,x2)).整形(2,len(x1)) ValueError:新数组的总大小必须保持不变我假设您使用的是Python 3

我有两个数组x1和x2,都是1*14数组,我正在尝试将它们压缩,然后执行重塑

代码如下:

x1
Out[122]:数组([1,2,3,1,5,6,5,5,6,7,8,9,7,9])

Out[123]:数组([1,3,2,2,8,6,7,6,7,1,2,1,1,3])

ValueErrorTraceback(最近一次呼叫上次) 在() ---->1 X=np.数组(zip(x1,x2)).整形(2,len(x1))


ValueError:新数组的总大小必须保持不变

我假设您使用的是Python 3,其中的结果是一个带有
zip
对象的数组

您应该调用压缩项目的
list


在Python2中,
zip
返回一个列表,而不是Python3中的迭代器,您以前的代码可以很好地工作。

您使用的是Python3,因此
zip
会被延迟计算

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

np.array
未将由
zip
创建的生成器识别为iterable。如果先强制转换到列表,则效果良好:

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)))
给予

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