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

如何按numpy数组首列权重值重复对应行得到正确二维数组

问题原因

你的原有代码存在两处错误,导致结果不符合预期:

  • 重复计数逻辑错误:权重值为n的行,你先手动追加了1次原始行,又追加了np.repeat生成的n份副本,实际总重复次数为n+1次,这就是np.sum(chain[:,0])与结果长度不相等的根本原因
  • 结果结构错误:直接向列表中混合追加一维数组、二维数组,最终没有做数组拼接,得到的是嵌套的混合列表,不是规整的二维数组
最优实现方案

不需要编写循环,numpy原生np.repeat原生支持逐行指定重复次数,向量化运算效率远高于循环写法,完全适配你15413行的大数组场景:

import numpy as np

# 示例数组
chain = np.array([[1, 5, 3], [2, 2, 1], [3, 0, 1]])
# 沿行方向(axis=0),按第一列的权重值重复对应行,先转int避免浮点数权重报错
ACT_chain = np.repeat(chain, repeats=chain[:, 0].astype(int), axis=0)

运行后验证结果:

  • np.sum(chain[:,0])返回值为6,len(ACT_chain)返回值为6,二者完全匹配
  • 输出结果与预期完全一致:
array([[1, 5, 3],
       [2, 2, 1],
       [2, 2, 1],
       [3, 0, 1],
       [3, 0, 1],
       [3, 0, 1]])
原有循环写法修正(不推荐)

如果要保留循环逻辑,需要删除多余的单次行追加逻辑,每次按权重生成对应数量的行块存入列表,最后统一做垂直拼接即可,该写法效率远低于上述向量化方案,不建议用于大数组:

ACT_chain = []
for i in range(len(chain)):
    repeat_cnt = int(chain[i, 0])
    # 取出当前行保持二维结构,按权重重复
    row_block = np.repeat(chain[i:i+1, :], repeat_cnt, axis=0)
    ACT_chain.append(row_block)
# 拼接所有行块得到规整二维数组
ACT_chain = np.vstack(ACT_chain)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:39:39