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

Numpy如何使用另一矩阵的行索引赋值并实现无循环向量化操作?

你之前尝试的weights[:, weight_indexes[:]]会触发numpy的广播机制,行维度的全量切片和形状为(2000,10)的列索引数组广播后,会生成形状为(2000,2000,10)的数组,不符合你逐行取对应列索引的需求。

直接用numpy高级索引就能实现无循环的向量化操作,具体代码如下:

import numpy as np

# 构造与weight_indexes形状匹配的行索引数组:形状变为(2000, 1),可以和(2000,10)的列索引广播对齐
row_idx = np.arange(weight_indexes.shape[0])[:, np.newaxis]
weights = np.zeros((2000, 2000))
# 逐位置配对行、列索引,直接赋值
weights[row_idx, weight_indexes] = weight_values

这个写法和你原有循环的逻辑完全等价,运行效率远高于Python层级的for循环。

你也可以选择展平索引的写法,效果一致:

weights = np.zeros((2000, 2000))
weights[np.repeat(np.arange(2000), 10), weight_indexes.ravel()] = weight_values.ravel()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:06:07