我有以下矩阵:
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
的行数和列数以及索引方案都不是固定的。我怎么能这样做?
答案 0 :(得分:1)
有三点需要注意:
numpy
索引。numpy.array
instead of numpy.matrix
。结合这些要点,您可以使用词典理解:
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]])}
答案 1 :(得分:0)
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个矩阵等...你可以改变它以获得更多的概括