Info
此问题已关闭。 请重新打开它进行编辑或回答。
How to fix: Index Exceeds Matrix Dimensions
1 次查看(过去 30 天)
显示 更早的评论
Hello,I am doing an anomaly detection algorithm on the matlab. My code needs to read the data row by row in order to execute the code to meet the requirement. But, the time I execute the code, I encounter the Index Exceeds Matrix Dimensions error and I do not know how to solve the error. Hereby, I attached the program code. S1 is a matrix with the size 300*8, w with size 1*8 and h with size 1*1. The matrix w and h is updated on every iteration.
clc
index=0;
load ('S1.mat')
load ('var.dat','-mat');
learning_rate=0.1;
data_size=size(S1);
for i=1:data_size(1)%%indicating size of matrix S1 row
index=index+1;
current_reading=S1(i,:);
neuron_matrix_size=size(w);
for j=1:neuron_matrix_size(1)%%indicating size of matrix w row
sum_reading=0;
for k=1:neuron_matrix_size(2)%%indicating size of matrix w column
square_distance=(current_reading(k).^2-w(j,k).^2);
sum_reading=sum_reading+square_distance;
end
euc_distance_neuronj=sqrt(sum_reading);
if j==1
euc_distance = [euc_distance_neuronj];%%this is the first time create this matrix
else
euc_distance = [euc_distance euc_distance_neuronj];%%this is when the matrix has been created
end
end
%%find the best matching neuron and determine which neuron win
[minimum_distance,winning_neuron] = min(euc_distance);
%%disp(euc_distance,'euc_distance')
%%disp(minimum_distance,'minimum_distance = ')
if minimum_distance<0.3
h(winning_neuron)=h(winning_neuron)+1;
%%update weight
for k=1:neuron_matrix_size(2)
w(k,winning_neuron)=w(k,winning_neuron)+learning_rate*(current_reading(k)-w(j,k));
end
else
%%disp(w,sensor_reading)
h = [h 1];
w = [w;current_reading];
end
end
Is it any machine learning toolbox that I can use as anomaly detection for the result comparison?
3 个评论
Adam
2018-4-12
You have this line:
neuron_matrix_size=size(w);
and then:
for k=1:neuron_matrix_size(2)
w(k,winning_neuron)=w(k,winning_neuron)+learning_rate*(current_reading(k)-w(j,k));
end
further down. Since you are indexing iinto the first dimension of w using k you should be using
neuron_matrix_size(1)
in your for loop instead.
回答(1 个)
Veera Kanmani
2018-4-12
for k=1:neuron_matrix_size(2)
w(k,winning_neuron)=w(k,winning_neuron)+learning_rate.*(current_reading(k)-w(j,k));
end
try .* instead of *
0 个评论
此问题已关闭。
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!