извлечь столбцы из матрицы - PullRequest
1 голос
/ 15 января 2012

Как извлечь первые n столбцов из матрицы или как извлечь столбцы из, скажем, столбца 5 в столбец 5 + n?

Сценарий состоит в том, что у меня есть матрица с dim =(i, j), тогда я хочу посмотреть непрерывные блоки столбца длины n.Поэтому я хочу посмотреть на матрицу от столбца 0 до столбца n, а затем от столбца 1 до столбца 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 ]

4 голосов
/ 15 января 2012
>>> 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]])
2 голосов
/ 15 января 2012

Опираясь на ответ Свена Марнаха, если вы хотите выполнить вычисления для mat[:,0:8], затем для mat[:,1:9] и т. Д., Вы сможете выполнить все вычисления "сразу" на трехмерной матрице

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...