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

如何无for循环将关联X、Y数组的一维数组转为X-Y索引二维数组?

问题

我拥有一个值数组A、一个X数组和一个Y数组:

import numpy as np
A=np.random.rand(100)
X=np.linspace(0,9.9,100).astype('int')
Y=np.mod(np.linspace(0,99,100).astype('int'),10)

from sklearn.utils import shuffle
X, Y = shuffle(X, Y, random_state=0)

请问是否存在不使用for循环的快速方法,来构建满足B[X[i],Y[i]]=A[i]的数组B?

解决方案

当然可以,直接利用NumPy的高级索引就能实现无循环的高效赋值,这是NumPy原生的向量化操作,性能远优于for循环。

基础实现(覆盖式赋值)

首先确定数组B的形状:从X和Y的取值范围来看,X的取值是0-9,Y的取值也是0-9,所以B可以初始化为10x10的数组,之后直接用X和Y作为索引完成赋值:

import numpy as np

# 初始化B,可根据需求设置初始值,比如全0数组
B = np.zeros((10, 10))
# 向量化赋值,无需循环
B[X, Y] = A

处理重复索引的场景

如果X和Y中存在重复的坐标对(也就是多个i对应同一个(X[i], Y[i])),上面的代码会用最后一个对应的A值覆盖之前的。要是需要对重复位置的值做累加操作,可以使用np.add.at:

B = np.zeros((10, 10))
# 对重复位置的A值进行累加
np.add.at(B, (X, Y), A)

这个操作同样不需要循环,能高效完成累加赋值。

内容的提问来源于stack exchange,提问作者J.A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:20:42