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

如何在Python中为二进制数组按行替换多元素列表?

问题解决:numpy数组按行替换指定位置元素

给定以下数据:

randz = [1.59,2.51,1.73,[0.61, 0.38],2.67,0]
import numpy as np
zr = np.array([[1, 0, 0, 0, 0, 0],
               [0, 0, 0, 1, 0, 0],
               [0, 0, 1, 0, 0, 0],
               [0, 1, 0, 0, 1, 0],
               [1, 0, 0, 0, 0, 0],
               [0, 0, 0, 0, 0, 0]])

需求是将randz中的元素按行替换zr中值为1的位置:

  • 当randz元素为单个数值时,替换该行对应1的位置
  • 当randz元素为列表(如第四行的[0.61, 0.38]),需将列表元素分配到该行所有值为1的位置(顺序可互换)

可行解决方案

直接通过numpy的索引定位实现,无需提前统计count数组:

import numpy as np

randz = [1.59,2.51,1.73,[0.61, 0.38],2.67,0]
zr = np.array([[1, 0, 0, 0, 0, 0],
               [0, 0, 0, 1, 0, 0],
               [0, 0, 1, 0, 0, 0],
               [0, 1, 0, 0, 1, 0],
               [1, 0, 0, 0, 0, 0],
               [0, 0, 0, 0, 0, 0]])

# 初始化目标数组,复制zr结构并转为浮点型
newzr = zr.copy().astype(float)

for row_idx in range(len(randz)):
    # 获取当前行中值为1的列索引
    target_cols = np.where(zr[row_idx] == 1)[0]
    current_val = randz[row_idx]
    
    # 赋值:如果是列表则直接分配到对应列,否则填充所有目标列
    newzr[row_idx, target_cols] = current_val

# 输出结果
print(newzr)

代码说明

  1. 先复制zr并转为浮点型,避免整数数组无法存储小数的问题
  2. 遍历每一行,用np.where快速定位该行所有值为1的列位置
  3. 根据randz当前元素的类型直接赋值:单个数值会填充所有目标列(对应count=1的场景),列表则按顺序分配到目标列(对应count>1的场景)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:37:05