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

如何从两个NumPy数组同索引处随机选行并解决np.where广播错误

报错原因

np.where要求输入的条件数组、待选择的两个数组形状可以互相广播。你当前的条件random_selector > .1的形状是(4,),而A、B的形状是(4,2),np.where默认逐元素匹配,一维的条件数组无法直接对应二维数组每行的2个元素,触发广播形状不兼容的报错。

你期望的逻辑是按行选择:只要对应行的条件成立,就整行选A,否则整行选B,所以需要把条件数组扩展为和A、B维度匹配的(4,1)形状,触发numpy的行广播规则即可。

修复方案

两种常用实现方式:

方案1:直接修改np.where的条件维度

import numpy as np

A = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])
B = np.array([[9, 8], [8, 7], [7, 6], [6, 5]])
random_selector = np.random.random(size=len(A))

# 给条件数组新增最后一个维度,形状从(4,)变为(4,1)
C = np.where(random_selector[:, np.newaxis] > .1, A, B)

方案2:掩码索引赋值(可读性更高)

mask = random_selector > 0.1
C = np.empty_like(A)
C[mask] = A[mask]
C[~mask] = B[~mask]

两种写法都可以实现按行选择的需求,输出符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:24:02