我创建了一个表示2-dim矩阵的列表:
mylist = []
while (some condition):
x1 = ...
x2 = ...
mylist.append([x1,x2])
我想测试矩阵第二列中的每个条目是否大于0.45,但我遇到了一些困难:
>>> mylist
[[1, 2], [1, -3], [-1, -2], [-1, 2], [0, 0], [0, 1], [0, -1]]
>>> mylist[][1] > 0.4
File "<stdin>", line 1
mylist[][1] > 0.4
^
SyntaxError: invalid syntax
>>> mylist[:,1] > 0.4
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not tuple
鉴于mylist
是一个子列表列表,我如何指定其所有子列表的所有第二个组件?
选择列表来表示2维矩阵是否合适?我之所以选择它,只是因为矩阵的大小是动态确定的。你会推荐什么?
谢谢!
答案 0 :(得分:3)
像这样使用all()
:
>>> lst = [[1, 2], [1, -3], [-1, -2], [-1, 2], [0, 0], [0, 1], [0, -1]]
>>> all(x > 0.45 for _, x in lst)
False
如果您需要布尔列表,请使用列表解析:
>>> [x > 0.45 for _, x in lst]
[True, False, False, True, False, True, False]
mylist[][1]
语法无效,但如果您可以使用NumPy,那么您可以执行以下操作:
In [1]: arr = np.array([[1, 2], [1, -3], [-1, -2], [-1, 2], [0, 0], [0, 1], [0, -1]])
In [2]: all(arr[:,1] > 0.45)
Out[2]: False
In [4]: arr[:,1] > .45
Out[4]: array([ True, False, False, True, False, True, False], dtype=bool)
答案 1 :(得分:2)
我建议您使用numpy
,因为它可以通过矢量化函数提供显着的速度提升,尤其是在处理较大的数据集时。
import numpy as np
mylist = [[1, 2], [1, -3], [-1, -2], [-1, 2], [0, 0], [0, 1], [0, -1]]
myarray = np.array(mylist)
# Look at all "rows" (chosen by :) and the 2nd "column" (given by 1).
print(myarray[:,1]>0.45)
# [ True False False True False True False]