如何将9个元素列表中的值提供给3乘3矩阵

时间:2013-08-06 12:24:14

标签: 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(http://yt-project.org/YT data analysis代码。 YT是一个用于分析天体物理数据的Python包。

在我的代码中有一行

axes = axes[i][j]

我想将列表中的第一个值提供给

pf = load(L[0])

当ij为00时,列表中的第二个值为

pf = load(L[1])

当ij是01等等...... 请建议我实现这一目标的最有效方法? 谢谢

3 个答案:

答案 0 :(得分:2)

使用grouper recipeL的元素收集到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)。

explanation of the grouper recipe here

答案 1 :(得分:0)

使用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]]

答案 2 :(得分:0)

如果你对numpy有好处,它具有matlab的大部分功能,你可以通过将list转换为numpy数组来实现。如果您计划矩阵或矢量运算,这也很方便。然后,您可以通过重新整形1D阵列来获取2D阵列。

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
相关问题