新数组的总大小必须不变
total size of new array must be unchanged
我有两个数组 x1 和 x2,都是 1*14 数组,我试图将它们压缩然后执行整形。
代码如下;
x1
Out[122]: array([1, 2, 3, 1, 5, 6, 5, 5, 6, 7, 8, 9, 7, 9])
x2
Out[123]: array([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(最后一次调用)
在 ()
----> 1 X = np.array(zip(x1, x2)).reshape(2, len(x1))
ValueError: 新数组的总大小必须不变
我假设您使用的是 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
returns 是一个列表,而不是 Python 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]])
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]]
我有两个数组 x1 和 x2,都是 1*14 数组,我试图将它们压缩然后执行整形。
代码如下;
x1
Out[122]: array([1, 2, 3, 1, 5, 6, 5, 5, 6, 7, 8, 9, 7, 9])
x2
Out[123]: array([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(最后一次调用) 在 () ----> 1 X = np.array(zip(x1, x2)).reshape(2, len(x1))
ValueError: 新数组的总大小必须不变
我假设您使用的是 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
returns 是一个列表,而不是 Python 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]])
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]]