将预定义的二维数组转换为二维布尔数组



我得到了一个预定义的数组

a = [[2 3 4]
[5 6 7]
[8 9 10]]

我的问题是将这个数组转换为布尔数组,其中所有偶数都为true。感谢您的帮助!

我会使用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)

变量aPool将在有偶数值的情况下包含True,在有奇数值的情况中包含False。

array([[ True, False,  True],
[False,  True, False],
[ True, False,  True]])

这是根据这里的答案改编的:

a=np.array([1,2,3,4,5,6])
answer = (a[a%2==0])
print(answer)

这基本上就是Andrew所说的,但没有使用NumPy

如果你有兴趣在NumPy数组中获得布尔值并测试某些条件,你可以在这里找到一篇整洁的文章

只需使用一行即可完成(如果您不想使用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]])

最新更新