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

如何将N维向量转换为N(N-1)/2维列向量?代码问题排查

问题:生成的向量维度不符合N(N-1)/2要求

我的操作步骤:

  • 通过堆叠列向量构建方阵
  • 将该矩阵与其转置比较,得到方形二进制矩阵
  • 将二进制矩阵的上三角或下三角部分(不含对角线)向量化为长度为N(N-1)/2的列向量

当前代码生成的结果维度不符合要求:

import numpy as np

arr = np.array([2, 4, 2, 1, 1, 3, 4, 2])

bin_nums = ((arr.reshape(-1,1) & (2**np.arange(8))) != 0).astype(int)
bin_nums = bin_nums[:,::-1]

a = bin_nums
a_T = bin_nums.transpose()

b = (a == a_T).astype(int)

c = b[np.triu_indices(8)]

问题原因

np.triu_indices(8)默认会包含矩阵的对角线元素,提取的元素总数是8*(8+1)/2=36,但你需要的是不含对角线的上三角部分,元素总数应为8*(8-1)/2=28,这就是维度不符的核心原因。

修正方案

使用np.triu_indices(8, k=1),参数k=1表示只选取对角线以上(不包含对角线)的元素;如果需要下三角部分,替换为np.tril_indices(8, k=-1)即可。

修正后的代码:

import numpy as np

arr = np.array([2, 4, 2, 1, 1, 3, 4, 2])

bin_nums = ((arr.reshape(-1,1) & (2**np.arange(8))) != 0).astype(int)
bin_nums = bin_nums[:,::-1]

a = bin_nums
a_T = bin_nums.transpose()

b = (a == a_T).astype(int)

# 提取不含对角线的上三角元素
c = b[np.triu_indices(8, k=1)]
# 验证维度:print(c.shape) 输出 (28,),符合8*7/2=28的要求

内容的提问来源于stack exchange,提问作者Sean_TBI_Research

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:45:31