K-RNN算法的Matlab代码
来源:互联网 发布:游戏程序员需要做什么 编辑:程序博客网 时间:2024/05/19 18:15
K-RNN详细算法请参考Manifold-ranking based retrieval using k-regular nearest neighbor graph论文中的算法1,算法2有待更新。
算法1介绍:
Matlab代码:
function G = kRNN(W,m,k)% W 表示图像之间的相似度权值矩阵 % m 表示图所有顶点中顶点的最大度 % k 表示所有顶点的平均度% G 表示k-RNN图的权值矩阵 num_vertices = size(W, 1);% 节点数目 % 排序 sorted_W = zeros(num_vertices, num_vertices);% 保存排序后相似度权值矩阵 sorted_Position = zeros(num_vertices, num_vertices);% 保存排序后原始节点位置 for i = 1: num_vertices [sorted, position] = sort(W(i, :), 2);% 按照行排序 sorted_W(i, :) = sorted; sorted_Position(i, :) = position; end T = ones(num_vertices, num_vertices); % 初始化 G = zeros(num_vertices,num_vertices); maxDegree = k; averageDegree = 0; %搜索图 while (averageDegree < k) && (maxDegree < m) for vertices_i = 1 : num_vertices % 获取排序后的W第vertices_i行中的前maxDegree个元素 maxDegree_vertices = sorted_Position(vertices_i, 1 : maxDegree); for maxDegree_i = 1 : maxDegree % 读取maxDegree_vertices中的每一个元素 maxDegree_element = maxDegree_vertices(maxDegree_i); % 判断vertices_i与maxDegree_element节点之间是否存在边 if T(vertices_i, maxDegree_element) == 1 % 存在边,则查找maxDegree_element行的前maxDegree个元素中是否存在vertices_i元素 pos = find(sorted_Position(maxDegree_element, 1 : maxDegree) == vertices_i); if isempty(pos) == 0 % 存在,则在G中添加边 G(vertices_i, maxDegree_element) = W(vertices_i, maxDegree_element); % 在T中剔除边 T(vertices_i, maxDegree_element) = 0; else continue; end else % 不存在边 continue; end end end % 更新maxDegree maxDegree = maxDegree + 1; % 更新averageDegree,统计G中不为0元素的个数,然后再除以节点的总个数 averageDegree = sum(sum(G( : ) ~= 0)) / num_vertices; end return;end
测试:
clear;clc;load('D')W = D;k = 10;m = 2 * k;G = kRNN(W,m,k);
D为.mat格式的二维对称矩阵,主对角线上的所有元素为0,其他元素表示两个个体之间的距离值。里面的数据例如如下:
阅读全文
1 0
- K-RNN算法的Matlab代码
- [代码]基于RNN的文本生成算法
- K-means聚类算法Matlab代码
- k-means算法MATLAB和opencv代码
- k-means算法MATLAB和opencv代码
- 基于RNN的文本生成算法的代码运转
- K-MEANS的研究及matlab代码
- K-mean(多维度)聚类算法(matlab代码)
- K-means Matlab代码
- LBP算法的Matlab代码
- LBP算法的Matlab代码
- Moravec算法的matlab代码
- Forstner算法的Matlab代码
- Harris算法的Matlab代码
- SUSAN算法的matlab代码
- RNN及LSTM的matlab实现
- 遗传算法求解带非线性约束的单目标问题,matlab代码,基于K Deb的论文
- K-means聚类分析MATLAB代码
- Linux安全1-用户密码被暴力破解
- 图像处理库中图片缩放参数分析
- 从头到尾彻底理解傅里叶变换算法(上)
- 《Linux Shell编程从初学到精通(第2版)》pdf
- eclipse 插件刷新问题笔记
- K-RNN算法的Matlab代码
- JAVA中接口和抽象类的区别
- Android 动画之淘宝商品选择型号动画
- docker 原理之runC(3)
- 学习笔记: 源码 softmax_layer.cpp 略通
- R可视化学习代码(五)
- 入门级:GitHub和Git超超超详细使用教程!
- 云服务器Windows Server2012 配置动网BBS服务器
- 用迭代法求 a 的平方根。求平方根的迭代公式为····