How to use if, else conditional loop on anonymous function handle?

20 次查看（过去 30 天）
hello_world 2018-8-3

For the following example, given at https://www.mathworks.com/help/stats/evalclusters.html:
eva = evalclusters(meas, 'kmeans', 'CalinskiHarabasz', 'klist',[1:6])
Now, in the following example we use anonymous function handle:
myfunc = @(X,K)(kmeans(X, K, 'emptyaction','singleton', 'replicate',5));
eva = evalclusters(meas, myfunc, 'CalinskiHarabasz', 'klist',[1:6])
kmeans returns indices, cluster center location, etc. I will like to put an if condition on myfunc before I pass it eva. So if other words, if the given condition fails, I will not like to run evalclusters.
4 个评论显示 2更早的评论隐藏 2更早的评论
Albert Fan 2018-8-3
I don't quite understand you idea. The optimal number of clusters is determined by the evaluation object, and the function handle you fed in is just a clustering algorithm and that algorithm shouldn't be dependent on the optimal number of clusters. So what are you trying to achieve here?
hello_world 2018-8-3
@Albert Fan: I have modified the language of my question.

采纳的回答

Albert Fan 2018-8-3
First of all, you cannot add a complex if statement in an anonymous function. The workaround is similar to what Adam has mentioned, is that you can create a regular function and pass the function handle in. for example:
eva = evalclusters(meas, @myfunc, 'CalinskiHarabasz', 'klist',[1:6])
function myfunc
% code
if condition
%do stuff
end
end
Additionally, the optimal cluster number is the result of evalclusters, which means you should not use that number as a condition of the clustering algorithm to stop execution. Otherwise, I personally do not know a way to stop evalcluster inside myfunc. However, if you just want to play with numbers, you can call exit() to stop the entire program. If you still want to execute something after evalclusters, then you could set a global variable and when you meet the condition, you set the variable to true and in mufunc, if that variable is true, do nothing and return. But that is rather complex and not a very good practice.

类别

Help CenterFile Exchange 中查找有关 k-Means and k-Medoids Clustering 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by