Matlab:查找矩阵<0.001的元素的行索引,不包括某些行。(Matlab: Find row index of elements in a matrix <0.001, excluding certain rows.)
我在Matlab中使用Cobra Toolbox进行双基因敲除研究,并且生长比率的输出是100乘100的矩阵,称为grRatioDble。 我需要找到该矩阵元素的行和列索引<0.001,不包括单基因敲除必需的行。 我有一个我想要排除的行索引的列矩阵。 是否有捷径可寻?
(nb。我不能只从矩阵中删除不需要的行,然后对其余的单元格进行行,列索引更改)
谢谢,莎拉。
I am using the Cobra Toolbox in Matlab to perform a double gene knockout study and output for growth ratios is a 100 by 100 matrix called grRatioDble. I need to find the row and column index for elements of this matrix which are <0.001, excluding the rows which were essential on single gene knockout. I have a 1 column matrix of the row indexes that I want to exclude. Is there an easy way to do this?
(nb. I cannot just remove the unwanted rows from the matrix as then row, column index changes for the remaining cells)
Thanks, Sarah.
原文:https://stackoverflow.com/questions/36809246
更新时间:2020-02-11 22:31
最满意答案
这段代码应该做的工作:
1 /获取grRatioDble<0.001所有行/列索引:
[row,col]=find(grRatioDble<0.001);
2 /排除不需要的行 (比如包含不需要的行的向量是rows2exclude ):
row=row(~ismember(row,rows2exclude));
col=col(~ismember(row,rows2exclude));
This piece of code should do the work :
1/ Get all row/col indexes where grRatioDble<0.001 :
[row,col]=find(grRatioDble<0.001);
2/ Exclude unwanted rows (say the vector containing unwanted rows is rows2exclude):
row=row(~ismember(row,rows2exclude));
col=col(~ismember(row,rows2exclude));
2016-04-23
相关问答
编辑: gnovice的建议比我的更简单: [~,indx]=ismember(X,M,'rows')
indx =
3
第一个解决方案: 您可以使用find和ismember轻松实现。 这里有一个例子: M=magic(4); %#your matrix
M =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
...
使用基于A逻辑索引: B=B(A~=-1,:);
A=A(A~=-1);
Use logical indexing based on A: B=B(A~=-1,:);
A=A(A~=-1);
方法1 要将F从当前的线性索引形式转换为行索引,请使用mod : rows = cellfun(@(x) mod(x-1,size(A,1))+1, F, 'UniformOutput', false);
你可以将它与你的代码结合成一行。 另请注意,您可以直接使用B作为arrayfun的输入,并避免一个索引阶段: rows = arrayfun(@(x) mod(find(x==A)-1,size(A,1))+1, B(:), 'UniformOutput', false);
这是如何工作的
...
我认为C = A .* (B~=0); 应该管用。 在两个稀疏矩阵的逐次乘法中只能访问非零,因此速度很快。 I think C = A .* (B~=0); should work. Only non-zeros will be accessed in the entrywise multiplication of two sparse matrices so it will be fast.
看起来我明白了 - m = magic(3)
v = [3 4]
[~,c] = size(m)
i = 1:c
i(ismember(m(:,1),v))
可能有更好的方法,我不确定。 Looks like I got it -- m = magic(3)
v = [3 4]
[~,c] = size(m)
i = 1:c
i(ismember(m(:,1),v))
there might be a better way, I am not sure.
你试过plot(M')吗? 从plot文件的第一段开始: 当Y是实数时,plot(Y)绘制Y的列与每个值的索引。 Have you tried plot(M')? From the first paragraph of the documentation of plot: plot(Y) plots the columns of Y versus the index of each value when Y is a real number.
您是否尝试在矩阵上进行测试,其中唯一有效的行是最后一行? 比如说, [-1; -1 0 -1] 也许 [1 -1; -1 0 -1] 如果每行必须有一个除-1以外的元素。 Did you try testing it on a matrix where the only valid row is the last row? Say for example, [-1; -1 0 -1] Or perhaps [1 -1; -1 0 -1] if every row has to have some
...
我注意到你在res提供的订单是包含零的订单。 我不知道这是不是你的意思(它不适合你的问题描述),但如果你想这样做,你可以这样做: res
out
iszero
c(out[!iszero[out]], i[iszero])
})
res
> res
[,1] [,2] [,3] [,4] [,5]
[1,] 3 1 5
...
这段代码应该做的工作: 1 /获取grRatioDble<0.001所有行/列索引: [row,col]=find(grRatioDble<0.001);
2 /排除不需要的行 (比如包含不需要的行的向量是rows2exclude ): row=row(~ismember(row,rows2exclude));
col=col(~ismember(row,rows2exclude));
This piece of code should do the work : 1/ Get all row
...
考虑一下 A = [1 2 3; %Matrix A is a bit different from yours for testing
4 5 6;
7 8 1;
1 2 7;
4 5 6];
[row col] =size(A)
answers = zeros(row,row); %matrix of answers,...
%(i,j)
...