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

如何在Python3与Numpy中实现Matlab式数组多子集提取?

在NumPy中实现Matlab的数组创建与多子集提取操作

1. 创建等差数组(等效Matlab a=1:0.5:10)

Matlab的start:step:end会包含终点值,而NumPy的np.arange是左闭右开区间,所以可以通过两种方式生成等效数组:

  • 用np.arange时,把终点设为略大于目标值(比如10.01),确保包含10
  • 用np.linspace直接指定生成的总点数(计算方式:(10-1)/0.5 +1 =19)
import numpy as np

# 方法1:np.arange实现
a = np.arange(1, 10.01, 0.5)

# 方法2:np.linspace实现(结果完全一致)
a = np.linspace(1, 10, num=19)

两种方法生成的数组都是[1., 1.5, 2., ..., 10.]。

2. 提取多子集(等效Matlab b=a([1:3 10:13]))

注意Matlab是1起始索引,NumPy是0起始索引,需要把Matlab的索引减1转换:

  • Matlab的1:3对应NumPy的0:3(取前3个元素)
  • Matlab的10:13对应NumPy的9:13(切片9:13会取索引9、10、11、12,对应Matlab的10到13)

用np.r_可以像Matlab那样拼接多个切片/索引,生成连续的索引数组,直接用于提取:

# 组合索引并提取目标子集
b = a[np.r_[0:3, 9:13]]

运行后b的结果为[1., 1.5, 2., 5.5, 6., 6.5, 7.],和Matlab输出完全一致。

针对你的实际场景(1×7向量、随机索引)

如果是长度为7的1维向量,需要提取随机分布的子集(混合单个索引和切片),直接用np.r_拼接即可:

# 示例:长度为7的目标向量
vec = np.array([10,20,30,40,50,60,70])
# 提取索引0、2-4、6的元素
subset = vec[np.r_[0, 2:5, 6]]
# 结果:array([10, 30, 40, 50, 70])

如果只是离散的单个索引,直接传入列表也可行:vec[[0,2,6]]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:42:43