2024-04-20 11:59:16 发布
网友
我是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是新手,所以如果您能告诉我如何做,我将不胜感激。 非常感谢
你可以这么做
[ [int(y) for y in x] for x in B ]
对布尔值执行int()。你知道吗
int()
int(False)-->;0int(True)--gt;1
int(False)
0
int(True)
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的:
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
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]]
你可以这么做
对布尔值执行
int()
。你知道吗int(False)
-->;0
int(True)
--gt;1
最好使用numpy:
导致
filtered_data
的:如果没有numpy,您可以使用嵌套列表理解来实现,但是我相信您会同意numpy解决方案更清晰,如果它是一个选项:
给你
filtered_data
等于使用
enumerate
例如:
输出:
相关问题 更多 >
编程相关推荐