0

我有一个类似的列表:

L = [11, 15, 18, 20, 22, 25, 30, 35, 40]

9 个元素。我想将每个值提供给 3 x 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 数据分析代码。YT 是一个用于分析天体物理数据的 Python 包。

在我的代码里面有一行

axes = axes[i][j]

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

pf = load(L[0])

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

pf = load(L[1])

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

4

3 回答 3

2

使用grouper recipe将元素收集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)。

这里有石斑鱼食谱的解释

于 2013-08-06T12:25:08.903 回答
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]]
于 2013-08-06T12:32:53.773 回答
0

如果您对具有 matlab 大部分功能的 numpy 没问题,您可以通过将列表转换为 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
于 2013-08-06T13:20:35.660 回答