You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从现有距离矩阵数组生成含行列索引与值的新数组技术求助

解决从距离矩阵生成非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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:04:24