find() function indexing seems confusing

14 次查看(过去 30 天)
I am writing the code where I want to find the min distance from each point to cluster and the cluster they are assigned to. A step of the k-means algorithm. So I used the function of find. I am confused because even though I tried to set examples, but I keep finding myself in a loophole.
[s_norm, ind] = sort(norm_x(i,:)); % keep i th rown in ascending order
vec_distance(i) = s_norm(1); % take the smallest distance
index(i) = find(ind == 1);
Here is the example I work with
norm_x(i,:) = [2.5 1.0 0.8 3.2]
[s_norm, ind] = sort(norm_x(i,:))
s_norm = [0.8 1.0 2.5 3.2]
ind = [3 2 1 4]
As a reuslt, find(ind==1) should return "3" but why is my code not running? Please help.
  6 个评论
the cyclist
the cyclist 2025-9-22
Ah, I only noticed the
[2.5 1.0 0.8 3.2]
and wondered about the 1.0. I had not paid sufficient attention to the sort in there.
Alexander
Alexander 2025-10-7
Most likely an initialization problem before. Try one of the following:
%Example (also possible with double entries)
i=1;
norm_x(i,:) = [2.5 1.0 0.8 3.2];
% Find first smallest value + first index
[vec_distance(i), index(i)] = min(norm_x(i,:));
% Solution for an array
[vec_distance, index] = min(norm_x, [], 2);
% robust form if you you have double entries or want to find e.g. (ind == 2)
[~, ind] = sort(norm_x(i,:));
rank = zeros(1,numel(ind)); % double
rank(ind) = 1:numel(ind); % Inverse permutation
rank_of_col1 = rank(1) % should result in 3
rank_of_col1 = 3
rank_of_col2 = rank(2) % should result in 2
rank_of_col2 = 2
% Maybe you initialize "ind" incorrectly before? Try this for debugging:
[~, ind] = sort(norm_x(i,:));
class(ind) % -> 'double'
ans = 'double'
find(ind==1,1) % should result in 3
ans = 3
find(ind==2,1) % should result in 2
ans = 2

请先登录,再进行评论。

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Number Theory 的更多信息

标签

产品


版本

R2025b

Community Treasure Hunt

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

Start Hunting!

Translated by