博客上有不少人造轮子,明明一句话就能解决的事,非得花一上午的时间去for循环??这是初学数据结构的萌新的做法,如果你已经编写了足够代码,还是特别喜欢for循环去,那你用什么时间看论文,做研究呢?所以我想收集一些有用的函数。
A = ismember(Label, 12);
label是否包含第12类。
会返回一个矩阵
BW = boundarymask(Label);
imshow(imoverlay(RGB,BW,'cyan'),'InitialMagnification',67);
上图:
后一句的效果是可视化:
为什么会这样,因为这就是我要的效果。嗯具体的在我结课后会跟着代码一块放出来。
B=A(1:2:100,1:2:100)
对A下采样,间隔2采样。最后赋值给B
for i = 1:1:150
for j = 1:1:240
B((i-1)*8+1:(i-1)*8+9,(j-1)*8+1:(j-1)*8+9)=Visit1(i,j);
end
end
辣鸡作者,居然使用for循环。
对不起我无能为力了各位,我是真找不着函数,有知道的可以告诉我,提高下我对matlab的理解
连接两个字符串 :
str = ['a','b'];
数字转换成string
num2str(23,'%4d');
数值数组转换成string,不能用上面函数,即使用for依旧会造成混乱,我不知道为什么。明明调试moment,num2str(Label)输出单个元素,比如3,但是如果有个东西在左边等着赋值,并且有个for循环,就会变成整个字符串比如1111222333444赋值给a
A = sprintfc('%g',Label);
根据样本的标签,画彩色散点图
numlabel存储的是标签
scatter(Y(:,1),Y(:,2),'filled','cdata',numlabel);
trLabel存储的是标签,是double
for i =1 : length(trLabel)
c = trLabel(i)/15;
scatter(Y(i,1),Y(i,2),'filled','cdata',[min(c+1/16,1) min(c-1/16,1) min(1-c,1)]);
hold on;
end
Y第一列存储横坐标,第二列存储纵坐标。
如果想要自己配色,可以这样:
% for i = 1:length(Y(:,1))
% scatter(Y(:,1),Y(:,2),4,'MakerFaceColor',[trLabel(:)/20,0.5,0.5]);
% %plot(Y(i,1),Y(i,2),'--rs','MarkerFaceColor','1','Color',[.trLabel(i)*20 25 25]);
% end
c = ['y' 'r' 'c' 'w' 'k' 'b' 'g' 'm'];
for i =1 : length(trLabel)
if numlabel(i)<=8
scatter(Y(i,1),Y(i,2),c(numlabel(i)))
hold on;
elseif numlabel(i) == 9
scatter(Y(i,1),Y(i,2),'filled','cdata',[0.5 0.5 0.5]);
hold on;
elseif numlabel(i) == 10
scatter(Y(i,1),Y(i,2),'filled','cdata',[0.1 0.9 0.5]);
hold on;
elseif(numlabel(i) == 11)
scatter(Y(i,1),Y(i,2),'filled','cdata',[0.3 0,0.7]);
hold on;
elseif(numlabel == 12)
scatter(Y(i,1),Y(i,2),'filled','cdata',[0.9 0 0.5]);
hold on;
else
scatter(Y(i,1),Y(i,2),'filled','cdata',[0.9 0.9 0.5]);
hold on;
end
end
样本点只有边缘上色,空心圆,nz是空心圆大小。后面的三个[x y z]是颜色,取值范围[0,1].如果在最后面加了'd'那就是菱形了。
scatter(Y(i,1),Y(i,2),nz,'MarkerEdgeColor',[0.5 0.5 0.5],'d');
事实上除了功能性函数,还有计算型函数更加的重要,要完成一个计算公式,不同的函数会使用不同的内存,不同的方式,也有不同的完成时间,不同的表达形式。
举个例子:如果用for循环完成bsxfun的功能就会花更多的时间。
而2016版之后直接抛弃的bsxfun函数,两个不同维度的矩阵,张量,是直接可以相加相乘,各种操作的。
所以,找到最简便的方法就很重要。