Julia中如何实现Python式的矩阵指定位置元素赋值?
Julia中给矩阵指定位置元素赋值的等效实现
在Julia中,直接使用A[[1,2,3],[1,1,3]] = 1不会得到预期效果——这是因为Julia对双数组索引的处理是广播式的,会生成一个3×3的子矩阵并给所有元素赋值,而非仅选中(1,1)、(2,1)、(3,3)三个位置。以下是几种符合需求的实现方式:
笛卡尔索引法(推荐)
用CartesianIndex打包每个目标位置的坐标,精准定位单个元素:A = zeros(Int, 4, 4) A[CartesianIndex.([(1,1), (2,1), (3,3)])] .= 1线性索引法
Julia中矩阵按列优先存储,可先计算目标位置的线性索引(公式:(列号-1)*行数 + 行号),再直接索引赋值:A = zeros(Int, 4, 4) # (1,1)=1, (2,1)=2, (3,3)=(3-1)*4+3=11 A[[1, 2, 11]] .= 1逐个赋值法
对于少量元素,直接逐个指定位置赋值更直观:A = zeros(Int, 4, 4) A[1,1] = 1 A[2,1] = 1 A[3,3] = 1
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

