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

如何使用Numpy广播实现数组批量赋值以替代多行操作?

Numpy批量赋值的广播实现方案

原代码中,state[:, pixels, :] = colors报错的核心原因是数组形状不兼容:

  • state[:, pixels, :]的形状是(2, 3, 3)(2个batch、3个指定像素、每个像素3个颜色通道)
  • colors的形状是(2, 3),与目标区域的维度不匹配,无法直接广播。

要实现一行代码替代原两行赋值,只需将colors扩展一个维度,使其形状与目标区域兼容:

import numpy as np

state = np.arange(48, dtype='u1').reshape((2, 8, 3))
pixels = [3, 4, 5]
colors = [[42, 43, 44], [0, 1, 2]]

# 一行完成批量赋值
state[:, pixels, :] = np.array(colors)[..., np.newaxis]

原理说明

np.array(colors)[..., np.newaxis]将colors的形状从(2, 3)转换为(2, 3, 1),此时Numpy会自动将其广播为(2, 3, 3),与state[:, pixels, :]的形状完全匹配,实现:

  • 第0个batch中,像素3/4/5的三个通道分别被42/43/44填充
  • 第1个batch中,像素3/4/5的三个通道分别被0/1/2填充
    效果与原两行代码完全一致。

也可以用np.expand_dims(colors, axis=2)替代[..., np.newaxis],实现相同的维度扩展。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:43:21