MATLAB索引超出矩阵维度,求大神指点错误!

news/2024/5/20 8:02:56 标签: matlab, 聚类

MATLAB索引超出矩阵维度,求大神指点错误!

MATLAB索引超出矩阵维度,求大神指点错误!

最近在做k均值动态聚类的时候,matlab提示索引超出矩阵维度,不知道问题出在哪了。

代码

N1 = 50;
N2 = N1;
N3=N1; % 设置每类样本个数都为50
N = N1+N2+N3;
d = 2; % 设置为二维样本
X1 = rand(d,N1); % 第1类样本,1个样本占1列
X2 = rand(d,N2)+1;
X3=rand(d,N3)+2; % 第2类样本,1个样本占1列
X = [X1 X2 X3];
%----------------------2、初始化----------------------------------
m1_pre = X(:,1); % 初始化第1类均值,令其= x1
m2_pre = X(:,2);
m3_pre=X(:,3); % 初始化第2类均值,令其= x2
epsilon = 0.001; % 收敛阈值
T_max = 1000; % 最大迭代次数
%----------------------3、迭代----------------------------------
for t = 0:T_max
figure; % 画出样本均值
hold on; plot(m1_pre(1),m1_pre(2),‘gv’,‘markersize’,10,‘MarkerFaceColor’,‘g’);
hold on; plot(m2_pre(1),m2_pre(2),‘kv’,‘markersize’,10,‘MarkerFaceColor’,‘k’);
hold on; plot(m3_pre(1),m3_pre(2),‘rv’,‘markersize’,10,‘MarkerFaceColor’,‘r’);
m1 = 0;
m2 = 0;
m3 = 0;
N1 = 0;
N2 = 0;
N3 = 0;
for i = 1:N
xi=X(:,i);
if norm(xi-m1_pre) < norm(xi-m2_pre) && norm(xi-m1_pre) < norm(xi-m3_pre) % 最小距离判别,norm计算向量的模
m1 = m1+xi;
N1 = N1+1;
hold on; plot(xi(1),xi(2),xi(3),‘go’,‘markersize’,5,‘MarkerFaceColor’,‘g’);
else if norm(xi-m2_pre) < norm(xi-m1_pre) && norm(xi-m2_pre) < norm(xi-m3_pre)
m2 = m2+xi;
N2 = N2+1;
hold on; plot(xi(1),xi(2),xi(3),‘ko’,‘markersize’,5,‘MarkerFaceColor’,‘k’);
else norm(xi-m3_pre) < norm(xi-m1_pre) && norm(xi-m3_pre) < norm(xi-m2_pre)
m3 = m3+xi;
N3 = N3+1;
hold on; plot(xi(1),xi(2),xi(3),‘ro’,‘markersize’,5,‘MarkerFaceColor’,‘r’);
end
end
end
m1 = m1/N1;
m2 = m2/N2;
m3 = m3/N3;
t = t+1; % 迭代次数+1
xlabel(‘x_1’,‘fontsize’,16);
ylabel(‘x_2’,‘fontsize’,16);
title(sprintf(‘t=%d’,t),‘fontsize’,20);
if norm(m1 - m1_pre)<epsilon && norm(m2 - m2_pre)<epsilon && norm(m3-m3_pre)<epsilon % 判断是否停止迭代
break;
end
m1_pre = m1; % 更新均值
m2_pre = m2;
m3_pre = m3;
end
disp(sprintf(‘迭代%d次!’,t)); % 显示迭代次数


http://www.niftyadmin.cn/n/901640.html

相关文章

MATLAB-索引超出矩阵维度下标索引必须为正整数类型或逻辑类型 max()函数,一种解决办法

在使用matlab的max( )函数时&#xff0c;报错&#xff1a;下标索引必须为正整数类型或逻辑类型。 我检查了一遍数组Ldb&#xff0c;索引是没有问题的。matlab的索引是从1开始的&#xff0c;这一点没有用错。 再检查后发现程序里有这样的语句&#xff1a; maxmax(abs(sout));…

手把手教你用SNAP做全极化SAR图像分类

引言 最近在研究极化SAR图像分类方面的内容&#xff0c;发现用SNAP软件可以很方便的实现图像的分类。因为在入门过程中踩了很多坑&#xff0c;浪费了一些时间&#xff0c;为了不让大家踩坑&#xff0c;所以决定写下这篇教程。 前期准备 软件下载 SNAP是欧空局旗下的一个SAR…

Java学习笔记(一)数组——学习MOOC网 翁恺老师课程时记录

一、数组 1.1 数组 数据可以存放在变量里&#xff0c;每一个变量有一个名字&#xff0c;有一个类型&#xff0c;还有它的生存空间。如果我们需要保存一些相同类型、相似含义、相同生存空间的数据&#xff0c;我们可以用数组来保存这些数据&#xff0c;而不是用很多个独立的变…

Java学习笔记(二)使用对象——学习MOOC网 翁恺老师课程时记录

六、使用对象 6.1 字符类型 java采用Unicode 16表达字符&#xff0c;可以表达包括汉字在内的多种文字&#xff0c;每一个字符对应一个Unicode编码的值&#xff0c;所以字符之间是可以比较大小的。 1.字符计算 char cA; c; System.out.println(c);2.逃逸字符 //字符类型和整…

Java学习笔记(三)函数——学习MOOC网翁恺老师课程记录

七、函数 7.1 函数定义与调用 ​ Java的函数必须定义在类的内部&#xff0c;成为类的成员。定义一个函数&#xff0c;要像这样写&#xff1a; <返回类型> <方法名称>(<参数表>) { ​ <方法体> } ​ 返回类型是这个函数运行结束时要返回给调用者的…

C# 解决 System.InvalidOperationException:“线程间操作无效: 从不是创建控件“...”的线程访问它。”

出错代码 // Form1.cs public partial class Form1 : Form {public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){Task.Run(() > // 模拟另一线程{// 在另一线程内做一些耗时操作//...string result "...";// 输出结…

慕课网翁恺老师《面向对象程序设计——Java语言》第一周课程笔记及作业题(设计一个表示分数的Fraction类)

一、类与对象 1.1 用类制造对象 对象变量是对象的管理者而非所有者&#xff0c;所以涉及到赋值、函数参数传递和比较都与普通变量有所不同。本节尝试自己定义类&#xff0c;然后用自己定义的类来创建对象&#xff1b;类定义了对象长什么样&#xff0c;对象则是按照类的定义所…

慕课网翁恺老师《面向对象程序设计——Java语言》第二周对象交互——课程笔记

二、对象交互 2.1 对象交互 2.1.1 前言 面向对象程序设计的第一步&#xff0c;就是在问题领域中识别出有效的对象&#xff0c;然后从识别出的对象中抽象出类来&#xff1b;面对纷繁复杂的显示问题&#xff0c;往往存在多种对象划分的方式&#xff0c;而不同的划分会带来类的…