Matlab 从矩阵M中,如何找到向量Vi的单元格,表示每列Ci中值2的索引行?
从矩阵M中,如何找到向量Vi的单元格,表示每列Ci中值2的索引行 例如:Matlab 从矩阵M中,如何找到向量Vi的单元格,表示每列Ci中值2的索引行?,matlab,matrix,Matlab,Matrix,从矩阵M中,如何找到向量Vi的单元格,表示每列Ci中值2的索引行 例如: M=[1 0 2 0; 0 2 2 1; 2 1 0 2; 2 1 2 0; 0 2 1 1] 预期输出:{[3 4],[2 5],[1 2 4],[3]}- 使用验证结果- 与- 使用验证结果- 您可以结合使用以下各项: 要再次检查: >> celldisp(out) out{1} = 3 4 out{2} = 2 5 out{3}
M=[1 0 2 0;
0 2 2 1;
2 1 0 2;
2 1 2 0;
0 2 1 1]
预期输出:{[3 4],[2 5],[1 2 4],[3]}-
使用验证结果-
与-
使用验证结果-
您可以结合使用以下各项: 要再次检查:
>> celldisp(out)
out{1} =
3
4
out{2} =
2
5
out{3} =
1
2
4
out{4} =
3
您可以使用找到编号2的列位置作为装箱参数,使用找到编号2的行位置将这些位置分组到同一个装箱中。accumarray的默认行为是对属于同一bin的值求和,而不是求和,我们将所有内容组合到一个数组中,因此输出将是一个单元格数组,其中每个索引都是所需的列位置,单元格内容告诉您哪些行包含对应列的数字2
如果列中没有值2,这也应该正确处理这种情况。此特定列的输出将为您提供空数组。例如,如果我们有:
>> M = [1 0 2 0; 0 2 2 1; 2 1 0 1; 2 1 2 0; 0 0 1 1]
M =
1 0 2 0
0 2 2 1
2 1 0 1
2 1 2 0
0 0 1 1
在文章开头运行代码,我们得到:
>> celldisp(out)
out{1} =
3
4
out{2} =
2
out{3} =
1
2
4
out{4} =
[]
您可以结合使用以下各项: 要再次检查:
>> celldisp(out)
out{1} =
3
4
out{2} =
2
5
out{3} =
1
2
4
out{4} =
3
您可以使用找到编号2的列位置作为装箱参数,使用找到编号2的行位置将这些位置分组到同一个装箱中。accumarray的默认行为是对属于同一bin的值求和,而不是求和,我们将所有内容组合到一个数组中,因此输出将是一个单元格数组,其中每个索引都是所需的列位置,单元格内容告诉您哪些行包含对应列的数字2
如果列中没有值2,这也应该正确处理这种情况。此特定列的输出将为您提供空数组。例如,如果我们有:
>> M = [1 0 2 0; 0 2 2 1; 2 1 0 1; 2 1 2 0; 0 0 1 1]
M =
1 0 2 0
0 2 2 1
2 1 0 1
2 1 2 0
0 0 1 1
在文章开头运行代码,我们得到:
>> celldisp(out)
out{1} =
3
4
out{2} =
2
out{3} =
1
2
4
out{4} =
[]
另一种方法:
M = [1 0 2 0; 0 2 2 1; 2 1 0 2; 2 1 2 0; 0 2 1 1]; %// data
v = 2; %// sought value
X = bsxfun(@times, (1:size(M,1)).', M==v); %'
y = nonzeros(X);
z = sum(X~=0, 1);
result = mat2cell(y.', 1, z);
对于不包含搜索值的列,这将返回[]。还有另一种方法:
M = [1 0 2 0; 0 2 2 1; 2 1 0 2; 2 1 2 0; 0 2 1 1]; %// data
v = 2; %// sought value
X = bsxfun(@times, (1:size(M,1)).', M==v); %'
y = nonzeros(X);
z = sum(X~=0, 1);
result = mat2cell(y.', 1, z);
对于不包含搜索值的列,它将返回[]。Nice。我喜欢我们用不同的方法得到相同的东西+1.这可以正确处理列,无任何2个大小写+很好。我喜欢我们用不同的方法得到相同的东西+1.这可以正确处理列,无任何2个大小写+1使用accumarray定制功能,实现卓越性能@LuisMendo-谢谢你,先生:也许你应该修改它,使它对不包含2的列返回[]。试一试例如M=[1020;0221;21101;21120;0011]@路易斯门多-那很容易。我将修改我的答案。@LuisMendo-修改。如果对你有效,请告诉我。对我来说是的。顺便说一句,谢谢你指出这个小缺陷。我假设每列至少有一个值等于2。accumarray与自定义函数的出色使用@LuisMendo-谢谢你,先生:也许你应该修改它,使它对不包含2的列返回[]。试一试例如M=[1020;0221;21101;21120;0011]@路易斯门多-那很容易。我将修改我的答案。@LuisMendo-修改。如果对你有效,请告诉我。对我来说是的。顺便说一句,谢谢你指出这个小缺陷。我假设每列至少有一个值等于2。看来这次bsxfun帽子已经切换到您了:@rayryeng我的第一个想法是Accumaray,但您已经选择了它!呵呵,哎呀。对不起的:。FWIW,我正要使用find和arrayfun,但@Divakar也从我这里选择了它@Divakar-我正式称这一天为MATLAB周一。@Divakar真有趣!!:-这一次,bsxfun帽子似乎已经换给了你:@rayryeng我的第一个想法是Accumaray,但你已经选择了它!呵呵,哎呀。对不起的:。FWIW,我正要使用find和arrayfun,但@Divakar也从我这里选择了它@Divakar-我正式称这一天为MATLAB周一。@Divakar真有趣!!:-我们的回答是否充分回答了你的问题?如果是这样,考虑接受我们的答案之一。好机会@我接受这三个答案!怎么做?谢谢你,你是接受方吗。唐克,我接受你的帮助。好机会@那么我会选择我收到的最快的回复!!圣马凯!好机会!我们的回答是否充分回答了你的问题?如果是这样,考虑接受我们的答案之一。好机会@我接受这三个答案!怎么做?谢谢你,你是接受方吗。唐克,我接受你的帮助。好机会@那么我会选择我收到的最快的回复!!圣马凯!好机会!