octave之奇巧淫技向量化计算实现寻找样本点所属聚类下标
前面有文章提到过,K-means算法,第一步骤是找出样本点的的所属聚类。下面用两种方式实现,一种是普通的循环,一种是完全向量化计算。
假设 :
X 是m×n样本矩阵,其每一行是一个样本,m表示样本数目,n表示特征数目;
centroids是K×n矩阵,K表示聚类数目,n表示特征数目,每一行是一个聚类的中心。
idx是m×1矩阵,idx(i) 表示第i个样本所属的聚类下标。(取值范围 1..K )
半循环半向量化方式 实现:
思想:循环遍历每一个样本点,计算每一个样本点距离K个聚类中心的值,并取最小值的那个聚类下标
for i = 1 : size(X, 1)
dif = bsxfun(@minus, X(i, :), centroids);
[w, iw] = min(sum(dif .* dif, 2));
idx(i, :) = iw;
endfor
完全向量化式 实现:
思想: 首先,构造两个m×n×K矩阵, 第一个矩阵为样本点的值,第二个矩阵为聚类中心值;
然后,计算样本点距离聚类中心的值,并找到最小值的那个聚类下标。
X_ext = bsxfun(@plus, X, zeros([size(X), K]));
centroids_ext = permute(centroids, [3, 2, 1]); dif_ext = bsxfun(@minus, X_ext, centroids_ext); [~, ix] = min(sum(dif_ext .* dif_ext, 2), [], 3); idx = ix;
跟上面那个半循环半向量的实现方式相比,这个完全向量化代码即很难看懂,也没有更简洁。速度效率也不知道也不会更快。奇巧淫技。
octave之奇巧淫技向量化计算实现寻找样本点所属聚类下标的更多相关文章
- iOS开发的一些奇巧淫技(转载)
iOS开发的一些奇巧淫技 http://www.cocoachina.com/ios/20141229/10783.html iOS开发的一些奇巧淫技2 http://www.cocoachina.c ...
- LLDB奇巧淫技
打印视图层级 这个相信很多人都会了,是ta是ta就是ta recursiveDescription 用法大概就是如下 123 po [self.view recursiveDescription] p ...
- C基础 那些年用过的奇巧淫技
引言 - 为寻一颗明星 为要寻一颗明星 徐志摩 1924年12月1日<晨报六周年纪念增刊> 我骑著一匹拐腿的瞎马, 向著黑夜里加鞭:—— 向著黑夜里加鞭, 我跨著一匹拐腿的瞎马.// 我冲 ...
- [异常解决] 奇巧淫技——VirtualBox中的linux无显示启动,并在win7上远程控制
楼主是资深技术宅(癖),由于感觉手上的老笔记本太卡,遂狠心买了个性能至强的主机同时配了个投影仪(满足躺着打代码的意淫场景).但是体验了大概一个月发现还是坐着打代码舒服,但是如下图坐着打代码总是要抬头看 ...
- iOS开发的一些奇巧淫技
TableView不显示没内容的Cell怎么办? 类似这种,我不想让下面那些空的显示. 很简单. self.tableView.tableFooterView = [[UIView alloc] in ...
- 介绍一个C++奇巧淫技
你能实现这样一个函数吗: MyType type; HisType htype; serialize_3(11, type, htype); serialize_4(type, hty ...
- iOS开发的一些奇巧淫技2
能不能只用一个pan手势来代替UISwipegesture的各个方向? - (void)pan:(UIPanGestureRecognizer *)sender { typedef NS_ENUM(N ...
- Windows的奇巧淫技(为什么GIF显示不出来??)
谁的电脑里没点小秘密?东藏西藏到最后自己都找不到了有木有?今天教大家个隐藏文件的高招: 将任意文件隐藏到图片中!怎么样?再也不用建什么「马列主义哲学」的文件夹啦!
- 在octave语言中K-means聚类算法求聚类中心的向量化计算
使用octave编程的时候,一定要注意使用向量化编程的思想,下面我就说说我今天做题遇到的一个K-means聚类问题,如何使用octave中的函数向量计算聚类中心centroids. octave几个函 ...
随机推荐
- struts2中的<s:select>默认选项
//... public class SelectAction extends ActionSupport{ private List<String> searchEngine; priv ...
- 根据key存不存在查询json
select * from table where value->'key' != 'null';
- 初识Jmeter(一)
倒霉熊的推荐: 文本学习网址:http://m.open-open.com/m/doc/category/105 视频学习网址: 软件学习网:http://www.ask3.cn/index.html ...
- Call an activity method from a fragment
From fragment to activty: ((YourActivityClassName)getActivity()).yourPublicMethod(); From activity t ...
- javascript语句语义大全(4)
1. var arr1=new Array(2) var arr2=new Array() var arr3=new Array("a","b") var ar ...
- HDU1865--More is better(统计并查集的秩(元素个数))
More is better Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 327680/102400 K (Java/Others) ...
- TM3、4波段GeoTiff数据计算NDVI
源码: 1: PRO TIFF_NDVI,F1,F2,FOUT 2: F1 = DIALOG_PICKFILE(TITLE = 'B4 TIFF',FILTER='*.TIF',/READ) 3: ...
- 转:Warning -26490: File name in a multipart submit is missing or empty.解决方法
录制测试上传文件脚本,回放报Warning -26490: File name in a multipart submit is missing or empty. Using an empty fi ...
- 利用工具MailUtils实现邮件的发送,遇到的大坑,高能预警!!
java实现邮件的发送依赖的jar包有两个:mail.jar和activation.jar,我也找到了一个工具包:itcast-tools-1.4.jar,实现原理大家可以查看源码,先放出资源链接 h ...
- LINUX中磁盘挂载与卸除
一.挂载格式与参数说明: 要将文件系统挂载到我们的 Linux 系统上,就要使用 mount 这个命令啦! 不过,这个命令真的是博大精深-粉难啦!我们学简单一点啊- ^_^ [root@www ~]# ...