如何将NumPy矩阵指定索引外的所有元素替换为0?
实现保留指定索引元素的数组处理
首先要明确:你提到的(1,4)、(4,3)、(3,1)是1起始的索引,而Python中列表的索引从0开始,对应转换为(0,3)、(3,2)、(2,0)。
方法一:分步实现(直观易懂)
先定义原数组和需要保留的索引(转换为0起始):
graph2 = [[0, 10, 15, 20], [10, 0, 35, 25], [15, 35, 0, 30], [20, 25, 30, 0]] # 转换为Python的0起始索引 keep_indices = [(0, 3), (3, 2), (2, 0)]
接着创建和原数组维度相同的全0数组,再把需要保留的元素从原数组复制过去:
# 初始化全0结果数组 result = [[0]*len(row) for row in graph2] # 填充需要保留的元素 for i, j in keep_indices: result[i][j] = graph2[i][j] # 查看结果 print(result)
运行后输出:
[[0, 0, 0, 20], [0, 0, 0, 0], [15, 0, 0, 0], [0, 0, 30, 0]]
方法二:列表推导式(简洁写法)
如果追求代码简洁,可用嵌套列表推导式一行完成,同时用集合提升查找效率(数组规模大时更明显):
keep_indices = {(0, 3), (3, 2), (2, 0)} result = [[graph2[i][j] if (i,j) in keep_indices else 0 for j in range(len(graph2[i]))] for i in range(len(graph2))]
内容的提问来源于stack exchange,提问作者Python
相关产品推荐
相关产品推荐

