|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- function [ attDataOut ] = AddMissingNodesAttrFromNeighborsNeighbors( data, attData, last_known_node, addMissingAttPerc, add2level)
- if nargin<4
- addMissingAttPerc = 1;
- end
- first_missing_node = last_known_node + 1;
-
- attDataOut = attData;
- m = size(data,1); % num rows
- ma = size(attDataOut,1);
- na = size(attDataOut,2);
- if (ma < m)
- attDataOut = [attDataOut; zeros(m-ma,na)];
- end
-
- for i = first_missing_node : size(data,1)
-
- neighbor = find(data(i,:), 1 ); %the missing node could have more than one neighbor if in a previous iteration we added a neighbor to it. The min should be the original neighbor
-
- %fprintf('i = %d, neighbor = %d\n', i, neighbor);
- %sum(data(i,:))
-
- if size(neighbor,2) > 0
- if add2level == 1
- neighborNeighbors = find(data(neighbor,:));
- else
- neighborNeighbors = neighbor;
- end
- if addMissingAttPerc == 1
- attDataOut(i,:) = attDataOut(i,:) | attDataOut(neighbor,:);
- for j = neighborNeighbors
- attDataOut(i,:) = attDataOut(i,:) | attDataOut(j,:);
- end
- else
- attDataOut(i,:) = attDataOut(i,:) | chooseAttData(attDataOut(neighbor,:),addMissingAttPerc) ;
- for j = neighborNeighbors
- attDataOut(i,:) = attDataOut(i,:) | chooseAttData(attDataOut(j,:),addMissingAttPerc);
- end
- end
- else
- fprintf('Warning: node %d doesnt have any neighbors\n', i);
- end
- end
- end % function AddMissingNodesAttrFromNeighborsNeighbors
-
-
- function [choosenAtt] = chooseAttData(inAttData, chooseAttPerc)
- choosenAtt = inAttData;
- attIndices = find(inAttData==1);
- for i= attIndices
- if rand(1)>chooseAttPerc
- choosenAtt(i) = 0;
- end
- end
- end % function chooseAtt
-
|