How to return corresponding element in two same same size matrices

I have two 360*360 matrices (x,y). I want to find the minimum value in each column of the y matrix (YMin - 1*360) and then find the values of the corresponding elements in the x matrix (XMin - 1*360). I tried to use the row numbers but I'm missing something simple here;
[YMin, YRow] = min(y);
XMin = x(YRow);

 采纳的回答

Your x(YRow) doesn't work because matlab doesn't know that you want element YRow(1) to be taken in the first column, YRow(2) in the second column, etc. One way to solve this:
[YMin, YRow] = min(y);
XMin = x(sub2ind(size(x), YRow, 1:numel(YRow))
Or you can do the calculation that sub2ind does yourself:
XMin = x(Yrow + (0:numel(YRow)-1) * size(x, 1))

更多回答(1 个)

a=rand(4) %fake datas as an example
b=rand(4)
[values,indices]=min(a)
b(indices)=a(indices) %corresponding elements are replaced in second matrix b

2 个评论

Then find the values of the corresponding elements
Need some explanation here
you want to returns the corresponding linear index or row?
Give a short example of your output using 2 by 2 matrix
see edited answer
XMin = x(YRow) %returns a 1*360 matrix
XMin = x(YRow,:) %returns a 360*360 matrix
I want to return a 1*360. First, the minimum element in each column and then return value in the second matrix in the same location in each column.
For example if the minimum value in column 1 of the first matrix is (179:1), then i want to return the value in (179:1) in the second matrix, for all columns.
I dont want to replace the elements in the second matrix, i want to return them into a 1*360 matrix (360 values to correspond)
y = [1,2,3:3,2,1:2,1,3];
x = [3,2,1:1,2,3:2,3,1];
[YMin, YRow] = min(y);
XMin = x(YRow); %returns [3 2 1] instead of [3 3 3]

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

产品

版本

R2015a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by