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

如何利用字典键值对初始化NumPy数组指定位置的值?

解决NumPy多通道数组按字典批量赋值的问题

你的代码执行失败,是因为locations是元组组成的列表,NumPy无法直接用这种格式进行索引。要实现无需遍历键值对的批量赋值,可以用以下两种矢量化方法:

方法一:用zip拆分坐标

通过zip(*...)将字典键中的行、列坐标分别提取为独立的可迭代对象,直接用于数组索引赋值:

import numpy as np

arr = np.zeros((6, 4, 3), dtype=np.float32)

values_of_channel_0 = {
        (0, 2) : 1,  
        (1, 0) : 1,  
        (1, 3) : 5,  
        (2, 1) : 2,  
        (2, 2) : 3,  
        (2, 3) : 1,  
        (3, 0) : 1,  
        (3, 2) : 2,  
        (4, 0) : 2,  
        (4, 2) : 20,  
        (5, 0) : 1,  
        (5, 2) : 10, 
        (5, 3) : 1 
}

# 拆分键中的行和列坐标
rows, cols = zip(*values_of_channel_0.keys())
# 为第0通道的指定位置赋值
arr[rows, cols, 0] = list(values_of_channel_0.values())

方法二:用NumPy数组转换坐标

将字典的键转换为二维NumPy数组,通过切片提取行、列索引:

coords = np.array(list(values_of_channel_0.keys()))
# 取数组第一列作为行索引,第二列作为列索引,赋值第0通道
arr[coords[:, 0], coords[:, 1], 0] = list(values_of_channel_0.values())

这两种方法都属于NumPy的矢量化操作,效率远高于遍历键值对,且代码简洁优雅。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:25:16