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

如何从带列索引的NumPy矩阵中提取分组列?

解决方法:按索引分组提取NumPy矩阵列

嘿,这个需求很直观,我们可以利用NumPy的布尔索引轻松实现列的分组提取,下面是具体的步骤和代码:

思路解析

核心思路是:先找出索引向量里的所有唯一分组标识,然后对每个标识,筛选出原始矩阵中对应列,最后把这些子矩阵收集到列表中。

完整代码示例

import numpy as np

# 定义你的原始矩阵和索引向量
M = np.matrix([[1,2,3,4,5,6,7,8,9,10], 
               [11,12,13,14,15,16,17,18,19,20], 
               [21,22,23,24,25,26,27,28,29,30]])
index = np.array([1,1,2,2,2,2,3,4,4,4])

# 一行搞定分组提取(也可以拆成循环,看你习惯)
matrix_list = [M[:, index == val] for val in np.unique(index)]

# 可以把列表里的矩阵分别取出来验证
M1, M2, M3, M4 = matrix_list
print("M1:\n", M1)
print("\nM2:\n", M2)
print("\nM3:\n", M3)
print("\nM4:\n", M4)

代码解释

  • np.unique(index):提取索引向量里的所有唯一值,这里得到[1,2,3,4],刚好对应我们需要的4个分组。
  • index == val:生成一个布尔数组,标记哪些列属于当前分组(比如当val=1时,布尔数组前两位是True,其余是False)。
  • M[:, index == val]:利用布尔索引提取矩阵中对应列,得到该分组的子矩阵。
  • 列表推导式把所有子矩阵一次性收集到matrix_list里,简洁高效。

输出结果

运行代码后,你会得到完全符合需求的子矩阵:

M1:
[[ 1 2]
[11 12]
[21 22]]

M2:
[[ 3 4 5 6]
[13 14 15 16]
[23 24 25 26]]

M3:
[[ 7]
[17]
[27]]

M4:
[[ 8 9 10]
[18 19 20]
[28 29 30]]

内容的提问来源于stack exchange,提问作者Álvaro Méndez Civieta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:45:44