Finding Middlemost row in a matrix

5 ビュー (過去 30 日間)
mr mo
mr mo 2017 年 11 月 6 日
コメント済み: Jan 2017 年 11 月 9 日
Hi. Suppose I have a (m*n) matrix A e.g.
A=[8.9505 4.8075 1.6187 0.0020
8.9755 4.7575 1.6187 0.0020
8.9755 4.7825 1.6187 0.0020
8.9755 4.8075 1.6187 0.0020
8.9755 4.8325 1.6187 0.0020
8.9755 4.8575 1.6187 0.0020
9.0005 4.7325 1.6187 0.0020
9.0005 4.7575 1.6187 0.0020
9.0005 4.7825 1.6187 0.0020
9.0005 4.8075 1.6187 0.0020
9.0005 4.8325 1.6187 0.0020
9.0005 4.8575 1.6187 0.0020
9.0255 4.7325 1.6187 0.0020
9.0255 4.7575 1.6187 0.0020
9.0255 4.7825 1.6187 0.0020
9.0255 4.8075 1.6187 0.0020
9.0255 4.8325 1.6187 0.0020
9.0255 4.8575 1.6187 0.0020
9.0505 4.7325 1.6187 0.0020
9.0505 4.7575 1.6187 0.0020
9.0505 4.7825 1.6187 0.0020
9.0505 4.8075 1.6187 0.0020
9.0505 4.8325 1.6187 0.0020
9.0755 4.7575 1.6187 0.0020
9.1255 4.6075 1.6187 0.0020
9.1505 4.5825 1.6187 0.0020
9.1505 4.6075 1.6187 0.0020
9.1755 4.5825 1.6187 0.0020
9.2005 4.5575 1.6187 0.0020];
Imagine that the first column is X coordinates and second column is Y coordinates of some points.
In the matrix A, the first column values varied form minimum value 8.9505 to maximum value 9.2005, and the second column values varied form minimum value 4.5575 to maximum value 4.8575
The middle point of column 1 is :
(8.9505 + 9.2005)/2 = 9.0755
and the middle point of column 2 is:
(4.5575 + 4.8575)/2 = 4.7075
I want to find which one of the rows of matrix A has the nearest values to these values in its first and second columns respectively. Thanks
  11 件のコメント
mr mo
mr mo 2017 年 11 月 6 日
At the end I want to find the row of matrix A that its first column and second column values is the nearest as possible as to the mid points that I was mentioned above. Thanks.
mr mo
mr mo 2017 年 11 月 6 日
編集済み: mr mo 2017 年 11 月 6 日
for example this row may be the answer
A(19,:) = 9.0505 4.7325 1.6187 0.0020
because the 9.0505 is near to 9.0755 where is the midpoint of first column of A, and 4.7325 is near to 4.7075 where is the midpoint of second column of A.

サインインしてコメントする。

採用された回答

Jan
Jan 2017 年 11 月 6 日
編集済み: Jan 2017 年 11 月 6 日
Perhaps - a bold guess:
meanValue = (min(A(:, 1:2)) + max(A(:, 1:2))) / 2;
dist = sum((A(:, 1:2) - meanValue).^2, 2); % >= 2016b: Auto-Expand
% With older Matlab versions:
% dist = sum(bsxfun(@minus, A(:, 1:2), meanValue).^2, 2)
[minDist, minIndex] = min(dist)
midA = A(minIndex, :)
For your example:
% The center between the minimal and maximal points:
meanValue = [9.0755, 4.7075]
% (Squared) Euclidean distances of A(:, 1:2) to this point:
d = sum((A(:, 1:2) - meanValue).^2, 2)
% Minimal distance:
[minDist, minIndex] = min(d);
minIndex = 19
% Or do you want multiple outputs, if the minimal distance occurs
% multiple times?
??? minDist = min(d);
??? minIndex = find(d == minDist);
But perhaps you look for something else. Unfortunately you do not provide a mathematical definition of what you want, although you have been asked repeatedly.
  11 件のコメント
mr mo
mr mo 2017 年 11 月 6 日
Thank you very much for your help.
meanValue = (min(A(:, 1:2)) + max(A(:, 1:2))) / 2;
dist = sum(bsxfun(@minus, A(:, 1:2), meanValue).^2, 2)
minDist = min(dist);
isMin = (dist == minDist); % Logical indexing
midA = A(isMin, :)
Is your code calculate the Euclidean distances ? because I want to find the row with minimum Euclidean distances from mid points.
Jan
Jan 2017 年 11 月 9 日
The Euclidean distance is:
sqrt(sum(x.^2))
Then you need sqrt(minDist) to get the distance.

サインインしてコメントする。

その他の回答 (1 件)

Image Analyst
Image Analyst 2017 年 11 月 6 日
Try mean() or median():
columnMedians = median(A, 1)
columnMeans = mean(A, 1)
depending on what "middlemost" means to you.
  4 件のコメント
Stephen23
Stephen23 2017 年 11 月 6 日
mr mo
mr mo 2017 年 11 月 6 日
編集済み: mr mo 2017 年 11 月 6 日
Imagine that the first column is X coordinates and second column is Y coordinates of some points. The middle point of column 1 is :
(8.9505 + 9.2005)/2 = 9.0755
and the middle point of column 2 is:
(4.5575 + 4.8575)/2 = 4.7075
I want to find which one of the row or rows of matrix A has the nearest values to these values in the first and second column respectively. Thanks

サインインしてコメントする。

Community Treasure Hunt

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

Start Hunting!

Translated by