2012-01-14 3 views
1

Как извлечь первые ncolumns из матрицы или как извлечь столбцы из столбца 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]]) 

Учитывая п = 8. Я хочу извлечь первые 8 столбцов.

Тогда матрица из колонки [1,11] в колонке [8,18]

Тогда матрица из колонки [2,12] в колонке [9,19]

ответ

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

Строительство на ответ Sven Marnach, в случае, если необходимо выполнить расчет на mat[:,0:8], то на mat[:,1:9], и т.д., вы можете быть в состоянии выполнить все расчеты «сразу» на 3-мерной матрицы

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 
Смежные вопросы