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

Python2下如何用NumPy索引数组快速查找矩阵值生成新矩阵?

在Python 2中用索引数组快速生成NumPy新矩阵的方法

嘿,在Python 2的NumPy环境里,要实现用索引数组快速查找并生成新矩阵,最快的方式得看你的索引结构,但最通用且高效的无非两种:高级索引和np.take()函数——这俩都是底层用C实现的向量化操作,完全避开了Python解释器的循环开销,比手写循环快N倍。

下面分两种常见场景给你举例:

场景1:有分开的行/列索引矩阵

如果你的索引是拆成两个形状相同的矩阵(一个存行索引,一个存列索引),直接用NumPy的高级索引是最直观高效的:

import numpy as np

# 示例原矩阵X
X = np.array([[1, 2], [3, 4]])
# 行索引矩阵:每个位置对应要取的X的行号
row_idx = np.array([[0, 1], [1, 0]])
# 列索引矩阵:每个位置对应要取的X的列号
col_idx = np.array([[1, 0], [1, 1]])

# 生成新矩阵:每个位置取X[row_idx[i,j], col_idx[i,j]]
new_matrix = X[row_idx, col_idx]
# 输出结果:[[2, 3], [4, 1]]

场景2:有扁平化的索引数组

如果你的索引是X扁平化后的一维索引(比如把X按行展开成一维数组后的下标),或者想把一维索引转换成多维新矩阵,用np.take()会更顺手:

# 还是用上面的X矩阵
flat_indices = np.array([1, 2, 3, 0])  # 对应X[0,1], X[1,0], X[1,1], X[0,0]

# 取出值后重塑成目标形状
new_matrix = np.take(X, flat_indices).reshape(2, 2)
# 输出结果同样是:[[2, 3], [4, 1]]

额外小技巧:如果索引是二维元组形式

要是你的索引是每个元素为(行号, 列号)的二维数组,可以先把它拆成行、列两个矩阵,再用场景1的方法:

indices = np.array([[(0,1), (1,0)], [(1,1), (0,0)]])
# 拆分出索引矩阵
row_idx = indices[:, :, 0]
col_idx = indices[:, :, 1]

new_matrix = X[row_idx, col_idx]

最后提醒一句:在Python 2里尽量用支持它的最新NumPy版本(比如1.16.x系列),这些版本的向量化操作性能优化得更好,能让上述方法跑得更快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:16:11