Python 如何从索引矩阵中提取列?

Python 如何从索引矩阵中提取列?,python,arrays,python-2.7,numpy,Python,Arrays,Python 2.7,Numpy,我有以下矩阵: 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]) 该向量有4个不同的值,因此我的目标是创建一个包含四个新矩阵的列表,以便第一个矩阵由M

我有以下矩阵:

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])
该向量有4个不同的值,因此我的目标是创建一个包含四个新矩阵的列表,以便第一个矩阵由M的前两列组成,第二个矩阵由第3列到第6列组成,依此类推:

M1 = np.matrix([[1,2],[11,12],[21,22]])
M2 = np.matrix([[3,4,5,6],[13,14,15,16],[23,24,25,26]])
M3 = np.matrix([[7],[17],[27]])
M4 = np.matrix([[8,9,10],[18,19,20],[28,29,30]])
l = list(M1,M2,M3,M4)
由于
M
的行数和列数以及索引方案都不是固定的,因此我需要以自动化的方式执行此操作。我该怎么做

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])

m = [[],[],[],[]]
for i,c in enumerate(index):
  m[k-1].append(c)

for idx in m:
  print M[:,idx]

这是一个有点硬编码,我假设你总是想要4个矩阵之类的。。您可以更改它以获得更多的概括

有三点需要注意:

  • 对于数量可变的变量,如本例中所示,最好使用字典
  • 您可以对单个案例使用简单的
    numpy
    索引
  • 除非你有非常具体的原因
结合这些要点,您可以使用字典理解:

d = {k: np.array(M[:, np.where(index==k)[0]]) for k in np.unique(index)}
结果:

{1: array([[ 1,  2],
           [11, 12],
           [21, 22]]),
 2: array([[ 3,  4,  5,  6],
           [13, 14, 15, 16],
           [23, 24, 25, 26]]),
 3: array([[ 7],
           [17],
           [27]]),
 4: array([[ 8,  9, 10],
           [18, 19, 20],
           [28, 29, 30]])}