我假设你的矩阵在一个列表列表中,并向你展示如何开始。(然而,正如我在一篇评论中提到的,如果你把矩阵放在一个numpy array或matrix中,它也会变得更加简单和快速。)
如果您只是将该值作为一个大的多行字符串,则可以将其转换为浮动列表,如下所示:m = [[float(col) for col in line.split()] for line in s.splitlines()]
现在,通过“根据第6列对这些数字进行分类”,听起来您想要的是按该列的整数值对它们进行分组。在
Python附带了一个^{}函数,它可以完成您在这里想要的大部分功能,但是您必须首先对数据进行排序。在
在Python中,排序和分组以及相关函数总是允许您传递键函数。您不必对第6列进行排序和分组,您可以使用第6列作为键对整行进行排序和分组。在
但实际上,您不想使用第6列的值作为键,而是要使用第6列的整数值。对于前者,您应该使用stdlib中的^{}函数,但是要做更复杂的事情,最好为其编写一个函数:
^{pr2}$
(如果您重复这样做,您可能需要编写一个包装器函数,该函数使用相同的键对其进行排序和分组,这样就不必重复自己的操作,从而出错。)
它提供的是一个内部有迭代器的迭代器,打印出来有点困难:[(k, list(g)) for k, g in groups]
…但你得到的是:[(68,
[[3917.0, 1.0, -0.662261, 25.148, 22.9354, 68.8076],
[3919.0, 1.0, -9.56836, -23.3265, -61.953, 68.8357]]),
(69,
[[3918.0, 1.0, 12.7649, 18.7451, 7.68473, 69.0063],
[3920.0, 1.0, 11.6292, 31.6525, -29.3697, 69.1372],
[3921.0, 2.0, 26.4837, -66.7897, 12.0257, 69.2282],
[3922.0, 1.0, -9.81652, 14.3788, 9.38343, 69.1217],
[3923.0, 2.0, 39.931, -88.1879, 109.498, 69.1604],
[3924.0, 1.0, 4.5502, 3.53887, -6.59604, 69.486],
[3925.0, 2.0, 13.6801, -24.6628, -5.7568, 69.9398]]),
(70, [[3926.0, 1.0, -10.5635, 7.05517, -8.82785, 70.2263]])]
因此,每个k是该类别分组的整数,每个g是该类别中的所有行(按排序顺序)。在
(注意,因为groups是一个迭代器,如果print这个,groups现在将为空。)
这就解决了你的第一个问题,我想你的第二个问题(我不确定你到底想要什么)。在
对于第三种情况,首先需要遍历组:for k, g in groups:
如果要在组中循环多次,则需要立即创建一个列表,然后循环该列表。在
对于每个组,您需要对多个列执行一些统计工作。最简单的方法是使用一个模块来处理所有的数学问题。PyPI上的^{}模块是一个不错的选择,尤其是现在(稍作改动)它可能会最终进入即将发布的Python版本的标准库中。在
但我只想说明一下,因为那是微不足道的。在
所以:def mean(sequence):
return sum(sequence) / len(sequence)
for k, g in groups:
rows = list(g)
print(k)
for column_index in 2, 3, 4:
column = [row[column_index] for row in rows]
print(mean(column))
可能有很多代码不能满足您的需要,但希望它足以让您开始,并在遇到困难时提出更具体的问题。在