【发布时间】:2021-02-04 14:58:59
【问题描述】:
我得到了一个预定义的数组
a = [[2 3 4]
[5 6 7]
[8 9 10]]
我的问题是将此数组转换为所有偶数都为真的布尔数组。任何帮助表示赞赏!
【问题讨论】:
标签: python arrays numpy boolean
我得到了一个预定义的数组
a = [[2 3 4]
[5 6 7]
[8 9 10]]
我的问题是将此数组转换为所有偶数都为真的布尔数组。任何帮助表示赞赏!
【问题讨论】:
标签: python arrays numpy boolean
我会使用 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 循环遍历二维列表中的每个列表。
如果您发现这种格式更易于理解,则可以对其进行扩展,但它本质上是做同样的事情:
>>> 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]])
【讨论】: