使用np.ix_时触发Cross index must be 1 dimensional错误的原因
错误触发原因
np.ix_对传入参数有明确要求:所有输入的索引序列必须为1维结构,用于生成可广播的多维度索引网格,适配数组的跨维度取值、赋值操作。- 你的代码中
a经过reshape(1,2)处理后已经是shape为(1,2)的二维数组,传入np.ix_时又额外套了一层列表[a],最终传入的参数维度远高于要求的1维,因此触发ValueError: Cross index must be 1 dimensional报错。
修复方案
核心是保证传入np.ix_的参数为1维结构,如果你需要给10x10数组的行1、行2与列1、列2的交叉区域赋值2x2的k_r,可以用以下两种修改方式:
方式1:修改a的定义,直接生成1维数组
import numpy as np # 去掉多余的reshape操作,直接生成1维的索引数组 a = np.arange(1,3) print(a) k_r = [[1,1],[1,-1]] r = np.zeros((10,10),int) # 直接传入1维的a作为np.ix_的参数,不要额外套列表 r[np.ix_(a,a)] = k_r print(r)
方式2:不修改原有a的定义,传参时展平数组
如果你的业务逻辑需要保留a为(1,2)的二维结构,可以在传参时用ravel()/flatten()将a展平为1维:
import numpy as np a = np.arange(1,3).reshape(1,2) print(a) k_r = [[1,1],[1,-1]] r = np.zeros((10,10),int) # 展平a为1维后传入np.ix_ r[np.ix_(a.ravel(),a.ravel())] = k_r print(r)
修改后两个传入np.ix_的参数都是长度为2的1维数组,生成的2x2索引网格刚好匹配k_r的形状,赋值操作可正常执行。
内容的提问来源于stack exchange,提问作者jason gallerge
相关产品推荐
相关产品推荐

