Python 如何将9个元素列表中的值输入到3×3矩阵
我有这样一个清单:Python 如何将9个元素列表中的值输入到3×3矩阵,python,for-loop,Python,For Loop,我有这样一个清单: L = [11, 15, 18, 20, 22, 25, 30, 35, 40] 共有9个要素。 我想把每个值输入到3×3矩阵的第(ij)个位置 00 01 02 10 11 12 20 21 22 也就是说,11个应该转到第(00)位,15个应该转到第(01)位,18个应该转到第(02)位,20个应该转到第(10)位,依此类推 请建议我使用for循环实现此目的的最有效方法。因为我正在编写一个YT()代码。YT是一个用于分析天体物理数据的Python包 在我的代码中有一行
L = [11, 15, 18, 20, 22, 25, 30, 35, 40]
共有9个要素。
我想把每个值输入到3×3矩阵的第(ij)个位置
00 01 02
10 11 12
20 21 22
也就是说,11个应该转到第(00)位,15个应该转到第(01)位,18个应该转到第(02)位,20个应该转到第(10)位,依此类推
请建议我使用for循环实现此目的的最有效方法。因为我正在编写一个YT()代码。YT是一个用于分析天体物理数据的Python包
在我的代码中有一行
axes = axes[i][j]
我想将列表中的第一个值提供给
pf = load(L[0])
pf = load(L[1])
当ij为00时,则列表中的第二个值为
pf = load(L[0])
pf = load(L[1])
当ij为01时,依此类推。。。
请告诉我实现这一目标的最有效方法?
谢谢使用将L
的元素收集为3组:
L = iter(L)
zip(*[L]*3)
比如说,
In [11]: L = [11, 15, 18, 20, 22, 25, 30, 35, 40]
In [12]: L = iter(L)
In [13]: zip(*[L]*3)
Out[13]: [(11, 15, 18), (20, 22, 25), (30, 35, 40)]
我假设“矩阵”是指元组列表。如果您希望将其转换为真正的矩阵对象(例如numpy.matrix
),则很容易
使用
itertools.islice有一个.:
>>> L = [11, 15, 18, 20, 22, 25, 30, 35, 40]
>>> from itertools import islice
>>> it = iter(L)
>>> [[x] + list(islice(it, 2)) for x in it]
[[11, 15, 18],
[20, 22, 25],
[30, 35, 40]]
使用基于索引的切片:
>>> [L[i:i+3] for i in xrange(0, len(L), 3)]
[[11, 15, 18],
[20, 22, 25],
[30, 35, 40]]
如果您对numpy还满意,它拥有matlab的大部分功能,您可以通过将列表转换为numpy数组来实现这一点。如果您计划进行矩阵或向量运算,这也很方便。然后,可以通过重塑一维阵列的形状来获得二维阵列
In [91]: arr = numpy.array(L).reshape((3,3))
Out[91]: arr
array([[11, 15, 18],
[20, 22, 25],
[30, 35, 40]])
In [92]: arr[0]
Out[92]: array([11, 15, 18])
In [93]: arr[0][1]
Out[93]: 15
In [94]: arr[2][2]
Out[94]: 40