我有一个内容5000个数字的列表。 它看起来像这个
y = [1,2,3,4,5,6]
我想用另一个矩阵复用这个矩阵。 因此,我想将其转换为列。
y' =[[1],[2],[3],[4],[5],[6]]
我尝试使用zip(*y)
。但是发生错误"zip argument #1 must support iteration"
非常感谢你的帮助。
答案 0 :(得分:3)
您可以使用列表推导:
>>> y = [1,2,3,4,5,6]
>>> [[i] for i in y]
[[1], [2], [3], [4], [5], [6]]
答案 1 :(得分:2)
考虑切换到numpy
以进行有效的向量和矩阵运算。
In [1]: import numpy as np
In [2]: %paste
y = [1,2,3,4,5,6]
## -- End pasted text --
In [3]: a = np.array(y)
In [4]: a
Out[4]: array([1, 2, 3, 4, 5, 6])
In [5]: np.dot(a, a)
Out[5]: 91
使用矩阵:
In [7]: M = np.matrix(np.arange(0, 15, 0.5).reshape((6, 5)))
In [8]: M
Out[8]:
matrix([[ 0. , 0.5, 1. , 1.5, 2. ],
[ 2.5, 3. , 3.5, 4. , 4.5],
[ 5. , 5.5, 6. , 6.5, 7. ],
[ 7.5, 8. , 8.5, 9. , 9.5],
[ 10. , 10.5, 11. , 11.5, 12. ],
[ 12.5, 13. , 13.5, 14. , 14.5]])
In [9]: a * M
Out[9]: matrix([[ 175. , 185.5, 196. , 206.5, 217. ]])
或简单地说:
In [10]: M = np.arange(0, 15, 0.5).reshape((6, 5))
In [11]: np.dot(a, M)
Out[11]: array([ 175. , 185.5, 196. , 206.5, 217. ])
答案 2 :(得分:0)
y' = [[i] for i in y]
会这样做
答案 3 :(得分:0)
我认为你正在尝试使用2D数组:
>>> z = [[1,2,3,4,5,6]]
>>> zip(*z)
[(1,), (2,), (3,), (4,), (5,), (6,)]
虽然现在你有一个元组列表,而不是列表列表。
据我了解,zip存在以获取可迭代的集合(烦躁(?))并返回元组列表,其中第n个元组包含每个可迭代的第n个项目。
当您使用1D列表并对其应用“*”时,在将列表传递给zip之前解压缩列表。所以,
y = [1,2,3,4,5,6]
zip(*y)
与
相同 y = [1,2,3,4,5,6]
zip(1,2,3,4,5,6)
正如错误所述,它要求zip使用不支持迭代的参数。