如何在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)
代码说明
- 先复制
zr并转为浮点型,避免整数数组无法存储小数的问题 - 遍历每一行,用
np.where快速定位该行所有值为1的列位置 - 根据
randz当前元素的类型直接赋值:单个数值会填充所有目标列(对应count=1的场景),列表则按顺序分配到目标列(对应count>1的场景)
内容的提问来源于stack exchange,提问作者Thanee Celebre
相关产品推荐
相关产品推荐

