使用Matlab快速获得满足条件的矩阵部分

H. *_*nen 2 arrays matlab matrix vectorization

我需要一种快速的方法来获取矩阵中的零件并将它们堆叠在一个新的矩阵中.假设我有一个像这样的矩阵:

M =

 1    45     4
 1    91    15
 2    34    89
 3    89     9
 3    96    99
Run Code Online (Sandbox Code Playgroud)

现在我想例如获取最后两列中的所有元素,左列具有值[1; 3],即输出应如下所示:

 45     4
 91    15
 89     9
 96    99
Run Code Online (Sandbox Code Playgroud)

为了获得例如第一列上对应于1的部分,我可以做到

M(M(:,1) == 1,2:end), 
Run Code Online (Sandbox Code Playgroud)

并且我可以使用'或'逻辑来获得与[1; 3]对应的部分,但在实际情况下,我将有一个长整数向量...是否有矢量化的方式来做这个?

我认为for循环也可能非常快,但矩阵的各个部分大小不同,快速堆叠起来可能很困难......

Div*_*kar 5

看看这对你来说是否足够快 -

int_arr = [1 3]; %// array of integers to select the rows
M(any(bsxfun(@eq,M(:,1),int_arr),2),2:end)
Run Code Online (Sandbox Code Playgroud)

要么

int_arr = [1;3]; %// array of integers to select the rows
M(any(bsxfun(@eq,M(:,1)',int_arr)),2:end)
Run Code Online (Sandbox Code Playgroud)