[英]Converting predefined 2d Array into 2d bool array
我得到了一個預定義的數組
a = [[2 3 4]
[5 6 7]
[8 9 10]]
我的問題是將此數組轉換為所有偶數都為真的布爾數組。 任何幫助表示贊賞!
我會使用 numpy,它非常簡單:
import numpy as np
a = [[2, 3, 4],
[5, 6, 7],
[8, 9, 10]]
a = np.asarray(a)
(a % 2) == 0
使用 Numpy 執行以下操作:
import numpy as np a = [[2, 3, 4], [5, 6, 7], [8, 9, 10]] aBool=(np.asarray(a)%2==0)
變量 aBool 將包含 True,其中有一個偶數值和 False 一個奇數值。
array([[ True, False, True], [False, True, False], [ True, False, True]])
這可以簡單地使用一行來完成(如果你不想使用 numpy):
[[i % 2 == 0 for i in sublist] for sublist in a]
>>> [[True, False, True], [False, True, False], [True, False, True]]
這里, i % 2
表示模運算符,它給出第一個數字除以第二個數字時的余數。 在這種情況下,對於偶數i % 2 = 0
,對於奇數i % 2 = 1
。 兩個 = 符號表示表達式被評估為布爾值。
兩個for
循環遍歷 2D 列表中的每個列表。
如果您發現此格式更易於理解,則可以對其進行擴展,但它本質上執行相同的操作:
>>> newlist = []
>>> for sublist in a:
partial_list = []
for i in sublist:
partial_list.append(i % 2 == 0)
newlist.append(partial_list)
>>> newlist
[[True, False, True], [False, True, False], [True, False, True]]
為什么不提否定:
a = [[2, 3, 4],
[5, 6, 7],
[8, 9, 10]]
>>> ~np.array(a)%2
array([[1, 0, 1],
[0, 1, 0],
[1, 0, 1]], dtype=int32)
這是一個布爾形式:
>>> ~(np.array(a)%2).astype(bool)
array([[ True, False, True],
[False, True, False],
[ True, False, True]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.