从现有距离矩阵数组生成含行列索引与值的新数组技术求助
解决从距离矩阵生成非0元素索引-值数组的问题
嘿,我完全懂你现在的困扰!咱们一步步把这个需求落地,把处理好的距离矩阵t转换成你想要的db数组。
核心思路
你的矩阵t已经是下三角为0、对角线为0的对称矩阵了,所以咱们只需要提取所有非0元素的行索引、列索引和对应值,就能得到目标数组db。
方法1:基础循环实现(适用于普通二维列表)
如果t是Python原生的二维列表,用嵌套循环遍历每个元素,筛选出非0值并记录位置就行:
# 初始化空数组db db = [] # 遍历每一行的索引i for i in range(len(t)): # 遍历该行每一列的索引j for j in range(len(t[i])): current_value = t[i][j] # 只保留非0值 if current_value != 0: db.append([i, j, current_value])
方法2:Numpy高效实现(适用于数值矩阵场景)
如果t是Numpy数组(处理距离矩阵常用这个工具),用Numpy的内置方法会更高效,代码也更简洁:
import numpy as np # 假设t是已处理好的Numpy距离矩阵 # 获取所有非0元素的行、列索引 rows, cols = np.where(t != 0) # 获取对应位置的元素值 values = t[rows, cols] # 把索引和值组合成db数组 db = np.column_stack((rows, cols, values))
额外说明
因为你已经把t的下三角替换成了0,上面的代码会自动跳过这些无效值,最终db里只会保留上三角的非0元素(也就是所有有意义的距离值)。如果后续还需要二次过滤0值,只需要对db做一次简单筛选就行,但其实这里已经提前处理好了~
内容的提问来源于stack exchange,提问作者yacx
相关产品推荐
相关产品推荐

