Arrays 在matlab中消除部分阵列
假设我们有一个100*4的数组 我们还有一个由1和0组成的100*1数组。假设有n1个 我们希望从100*4数组中创建一个n*4数组,其中只包括第二个数组为1的列 一种方法是通过双for循环。有没有更简单的方法 所以,我们有Arrays 在matlab中消除部分阵列,arrays,matlab,matrix,matrix-indexing,Arrays,Matlab,Matrix,Matrix Indexing,假设我们有一个100*4的数组 我们还有一个由1和0组成的100*1数组。假设有n1个 我们希望从100*4数组中创建一个n*4数组,其中只包括第二个数组为1的列 一种方法是通过双for循环。有没有更简单的方法 所以,我们有 A = [ [ 332 44 33 22 33 55 33 211 ..... [ 823 44 12 98 19 23 32 911 ..... .... .... ] 及 我们想要 C = [ [ 332 22 ...
A = [ [ 332 44 33 22 33 55 33 211 .....
[ 823 44 12 98 19 23 32 911 .....
....
....
]
及
我们想要
C = [ [ 332 22 ...
[ 823 98 ...
....
....
]
首先,您要
repmat
逻辑向量,使其与矩阵A
的大小完全相同
idx2keep = repmat(b, [1 4]); % Or [4 1] depending on if it's a col or row vector
然后,您可以简单地使用
B = A( idx2keep )
然后可以将其转换为列向量:
B = B(:)
这应该可以完成任务。下次请务必发布一些代码或符号,以便更容易、更清楚地回答此问题。首先,您要
repmat
逻辑向量,使其与矩阵A
的大小完全相同
idx2keep = repmat(b, [1 4]); % Or [4 1] depending on if it's a col or row vector
然后,您可以简单地使用
B = A( idx2keep )
然后可以将其转换为列向量:
B = B(:)
这应该可以完成任务。下次请始终发布一些代码或符号,以便更容易、更清楚地回答此问题。您应该使用:
你应使用:
看一看,我认为您正在寻找一种形式的逻辑索引。看一看,我认为您正在寻找一种形式的逻辑索引。
repmat
?您是否听说过bsxfun
?在这种情况下如何使用bsxfun?此外,此解决方案确实返回1x(4n)数组,而不是4xn数组。repmat
?您是否听说过bsxfun
?在这种情况下如何使用bsxfun?此外,此解决方案确实返回1x(4n)数组,而不是4xn数组。简明、正确,如果您不理解语法+1,则返回一个引用。简明、正确,如果您不理解语法+1,则返回一个引用。