掩蔽两个方阵

2024-04-20 11:59:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python的新手,有些事情我不知道该怎么做。我有以下矩阵:

A=[[1,1,1],[1,1,1],[1,1,1]]
B=[[False,True,False],[True,False,True],[False,True,False]]

我想用B把A转换成以下矩阵:

A=[[0,1,0],[1,0,1],[0,1,0]]

我确信这很简单,但是,如前所述,我对python是新手,所以如果您能告诉我如何做,我将不胜感激。 非常感谢


Tags: falsetrue矩阵事情新手
3条回答

你可以这么做

[ [int(y) for y in x]  for x in B ]

对布尔值执行int()。你知道吗

int(False)-->;0
int(True)--gt;1

最好使用numpy:

import numpy as np

data = np.array([[1, 2, 3,],
                 [4, 5, 6,],
                 [7, 8, 9,],])
mask = np.array([[False, True,  False,],
                 [True,  False, True,],
                 [False, True,  False,],])

filtered_data = data * mask

导致filtered_data的:

array([[0, 2, 0],
       [4, 0, 6],
       [0, 8, 0]])

如果没有numpy,您可以使用嵌套列表理解来实现,但是我相信您会同意numpy解决方案更清晰,如果它是一个选项:

data = [[1, 2, 3,],
        [4, 5, 6,],
        [7, 8, 9,],]
mask = [[False, True,  False,],
        [True,  False, True,],
        [False, True,  False,],]

filtered_data = [[data_elem if mask_elem else 0 
                  for data_elem, mask_elem in zip(data_row, mask_row)]
                 for data_row, mask_row in zip(data, mask)]

给你filtered_data等于

[[0, 2, 0], [4, 0, 6], [0, 8, 0]]

使用enumerate

例如:

A=[[1,1,1],[1,1,1],[1,1,1]]
B=[[False,True,False],[True,False,True],[False,True,False]]

for ind, val in enumerate(B):
    for sub_ind, sub_val in enumerate(val):
        A[ind][sub_ind] = int(sub_val)

print(A)

输出:

[[0, 1, 0], [1, 0, 1], [0, 1, 0]]

相关问题 更多 >