Matlab中var1(var2)索引操作解析及Python等效实现
Matlab索引操作
var1(var2)的逻辑及Python等效实现 一、Matlab代码的核心逻辑
Matlab的数组采用1-based索引(从1开始计数),var1(var2)的作用非常直接:
- 遍历
var2中的每一个元素,将其作为下标,从var1中取出对应位置的元素 - 所有取出的元素按
var2的顺序排列,组成新的列向量var3
比如var2第一个元素是11,对应取var1的第11个元素(即184),和给出的var3首元素完全匹配。
二、Python的等效实现
Python的序列(列表、Numpy数组)默认是0-based索引(从0开始计数),因此需要把var2的每个索引值减1,再执行索引操作。以下是两种常用实现方式:
1. 使用Python原生列表
var1 = [139, 140, 142, 143, 144, 154, 156, 157, 158, 159, 184, 185, 186, 187, 188, 189, 190, 191, 192] var2 = [11, 12, 12, 15, 10, 8, 7, 10, 9, 6, 10, 9, 8, 15, 5, 17, 15, 18, 14, 18, 16, 13, 13, 17, 19, 4, 15, 18, 1, 4, 2, 3, 3, 1, 9] # 转换索引并取值 var3 = [var1[i-1] for i in var2] # 若需要列向量格式,可转为嵌套列表 var3_col = [[x] for x in var3]
2. 使用Numpy(贴近Matlab向量操作风格)
Numpy支持批量索引操作,和Matlab的向量用法更接近,只需注意索引偏移:
import numpy as np var1 = np.array([139, 140, 142, 143, 144, 154, 156, 157, 158, 159, 184, 185, 186, 187, 188, 189, 190, 191, 192]) var2 = np.array([11, 12, 12, 15, 10, 8, 7, 10, 9, 6, 10, 9, 8, 15, 5, 17, 15, 18, 14, 18, 16, 13, 13, 17, 19, 4, 15, 18, 1, 4, 2, 3, 3, 1, 9]) # 索引减1后批量取值,reshape转为列向量 var3 = var1[var2 - 1].reshape(-1, 1)
内容的提问来源于stack exchange,提问作者user19678327
相关产品推荐
相关产品推荐

