[英]Represent a 2-dim matrix for column-wise operation
我創建了一個表示2維矩陣的列表:
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維矩陣好嗎? 我之所以選擇它,只是因為矩陣的大小是動態確定的。 你會推薦什么?
謝謝!
像這樣使用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)
如果您繼續使用列表,@ Aशwiniचhaudhary的解決方案是很棒的。
我建議您使用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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.