繁体   English   中英

Python - 矩阵中相同列/行的列表

[英]Python - list of same columns / rows from matrix

我有一个矩阵A和一个索引列表,比如l = [0,3,4,5] 有没有一种简单的方法来访问对应于那些行和列的A的4x4子矩阵,即A[l,l] A[l,:]访问A[l,:]中的行的所有列, A[l,1:4]访问l的行和A前四列,但我找不到访问l列和行索引的方法这种时尚。

目的是我想要定义一个新的矩阵,例如, G = np.eye(4) - A[l,l]或新的向量v = A[l,l]*c对于某些4x1向量c而不移动/复制存储在A中的数据。

IIUC,你可以使用np.ix_

>>> A = np.arange(100).reshape(10,10)
>>> L = [0,3,4,5]
>>> np.ix_(L, L)
(array([[0],
       [3],
       [4],
       [5]]), array([[0, 3, 4, 5]]))
>>> A[np.ix_(L, L)]
array([[ 0,  3,  4,  5],
       [30, 33, 34, 35],
       [40, 43, 44, 45],
       [50, 53, 54, 55]])

这也可用于索引以进行修改:

>>> A[np.ix_(L, L)] *= 10
>>> A[np.ix_(L, L)]
array([[  0,  30,  40,  50],
       [300, 330, 340, 350],
       [400, 430, 440, 450],
       [500, 530, 540, 550]])

当然,如果您愿意,可以随时手动构造ix_返回的数组:

>>> Larr = np.array(L)
>>> Larr[:,None]
array([[0],
       [3],
       [4],
       [5]])
>>> Larr[None, :]
array([[0, 3, 4, 5]])

如果你正在使用numpy(你应该),你可以这样做

import numpy as np
m=np.reshape(range(36),(6,6))
ix=(0,3,4,5)
m[ix,:][:,ix]

array([[ 0,  3,  4,  5],
       [18, 21, 22, 23],
       [24, 27, 28, 29],
       [30, 33, 34, 35]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM