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

Julia中如何用向量索引获取矩阵指定元素?(对标NumPy)

在Julia中实现按对应行列索引提取矩阵元素

假设我们有如下4×2矩阵:

a = [1 2; 3 4; 5 6; 7 8]
# 输出:
# 4×2 Matrix{Int64}:
#  1  2
#  3  4
#  5  6
#  7  8

想要通过两个等长向量指定对应位置的行和列提取元素:比如取a[1,1]和a[3,2],预期输出为1×2矩阵:

1×2 Matrix{Int64}:
 1  6

在Python NumPy中,a[[1,3], [1,2]]可以直接得到这个结果,但Julia中执行相同代码会生成行和列的笛卡尔积,得到2×2矩阵:

a[[1,3], [1,2]]
# 输出:
# 2×2 Matrix{Int64}:
#  1  2
#  5  6

这是因为Julia的向量索引逻辑是生成所有行和列的组合,而非对应位置匹配。以下是几种Julia的实现方式:


方法1:使用CartesianIndex构造坐标数组

CartesianIndex可以直接表示矩阵的二维坐标,构造坐标数组后即可提取对应元素:

# 构造目标坐标数组
indices = [CartesianIndex(1, 1), CartesianIndex(3, 2)]
# 提取元素并转换为1×2矩阵
result = reshape(a[indices], 1, 2)

运行结果:

1×2 Matrix{Int64}:
 1  6

方法2:广播调用getindex

通过Ref(a)固定矩阵对象,对行、列向量进行广播索引:

# 广播提取元素,再转换为1×2矩阵
result = reshape(getindex.(Ref(a), [1,3], [1,2]), 1, 2)

运行结果同上。

方法3:计算线性索引

Julia中矩阵按列存储,可通过LinearIndices获取元素的线性位置,再提取:

# 获取目标元素的线性索引
linear_idx = [LinearIndices(a)[1,1], LinearIndices(a)[3,2]]
# 提取元素并转换为1×2矩阵
result = reshape(a[linear_idx], 1, 2)

运行结果同上。


如果不需要矩阵形式,直接提取的结果是向量[1,6],可根据需求选择是否用reshape转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:40:24