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

NumPy用索引数组给(10000,2)数组对应行赋值报错如何解决

问题根源

你调用np.argwhere得到的indl是形状为(Nl, 1)的二维数组,每一行存储一个满足条件的索引值,而非索引数组所需的一维整数序列。用该二维数组索引x的行维度时,会额外引入维度,导致索引结果的形状和生成的多元正态分布数组形状不匹配,触发广播错误。

解决方法

方法1:修改indl的生成逻辑,直接得到一维索引数组

将indl的生成代码改为以下任意一种即可:

# 方法1.1 对argwhere结果降维
indl = np.argwhere(u <= thresholds[l]).flatten()
# 方法1.2 直接用flatnonzero生成一维索引
indl = np.flatnonzero(u <= thresholds[l])

修改后原有赋值代码x[indl,:] = rng.multivariate_normal(meanVectors[l,:], covMatrices[l,:,:], Nl)可直接正常运行。

方法2:索引时主动提取有效维度

如果不想修改indl的生成逻辑,也可以在赋值时直接取indl的第一列作为行索引:

x[indl[:,0],:] = rng.multivariate_normal(meanVectors[l,:], covMatrices[l,:,:], Nl)

额外校验项

可先打印x.shape确认数组形状确实为(10000, 2),避免x = np.zeros((n,N)).transpose()中n和N的参数顺序写反导致的额外形状问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:06:02