簡體   English   中英

表示用於列式運算的2維矩陣

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM