从矩阵中提取列

时间:2012-01-14 21:29:03

标签: python numpy scipy

如何从矩阵中提取第一个ncolumns,或者如何从第5列到第5列+ n中提取列?

场景是我有一个dim =(i,j)的矩阵,然后我想看一个长度为n的列的连续块。 所以我想查看从column0到column n的矩阵,然后在column1到column n + 1。等等 直到我到达矩阵的末尾。

由于

>>> mat=array(range(0,20)).reshape(2,10)
>>> mat
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]])

给定n = 8。 我想提取前8列。

然后从列[1,11]到列[8,18]

的矩阵

然后从列[2,12]到列[9,19]

的矩阵

2 个答案:

答案 0 :(得分:4)

>>> mat[:, 0:8]
array([[ 0,  1,  2,  3,  4,  5,  6,  7],
       [10, 11, 12, 13, 14, 15, 16, 17]])
>>> mat[:, 1:9]
array([[ 1,  2,  3,  4,  5,  6,  7,  8],
       [11, 12, 13, 14, 15, 16, 17, 18]])

答案 1 :(得分:2)

根据Sven Marnach的回答,如果你想在mat[:,0:8],然后在mat[:,1:9]等上进行计算,你可能能够执行所有的计算"马上#34;在三维矩阵

In [119]: x = np.lib.stride_tricks.as_strided(mat, shape = (3,2,8), strides = mat.itemsize*np.array([1,mat.shape[-1],1]))

In [120]: x
Out[120]: 
array([[[ 0,  1,  2,  3,  4,  5,  6,  7],
        [10, 11, 12, 13, 14, 15, 16, 17]],

       [[ 1,  2,  3,  4,  5,  6,  7,  8],
        [11, 12, 13, 14, 15, 16, 17, 18]],

       [[ 2,  3,  4,  5,  6,  7,  8,  9],
        [12, 13, 14, 15, 16, 17, 18, 19]]])

例如,要查找行的内积,可以使用

计算所有三个行
In [127]: np.sum(x[:,0,:]*x[:,1,:],axis = -1)
Out[127]: array([420, 564, 724])

而不是使用Python循环:

In [128]: for i in range(3):
   .....:     print(np.sum(mat[0,i:i+8]*mat[1,i:i+8]))
   .....:     
   .....:     
420
564
724