How to make two vectors the same size?

15 visualizaciones (últimos 30 días)
phdcomputer Eng
phdcomputer Eng el 10 de Dic. de 2019
Comentada: phdcomputer Eng el 11 de Dic. de 2019
I wrote these codes, I splitted the dataset(colon attached) into two parts (data1 and data2) based on the last column(1 or else)and make the columns equal to each others.
clc;
clear;
close all;
tic
load colon.mat
data=colon;
[n,m]=size(data);
d=10;
l=1;
t=1;
data1=[];
data2=[];
for i=1:n
if data(i,m)==1
data1(l,:)=data(i,1:m-1);
l=l+1;
else
data2(t,:)=data(i,1:m-1);
t=t+1;
end
end
if t>l
data1(l:t-1,1:m-1)=0;
else
data2(t:l-1,1:m-1)=0;
end
for i=1: m-1
thisCol1=data1(:,i);
thisCol2=data2(:,i);
a18(i)=fKLDDist(thisCol1,thisCol2);
end
and then in for loop I computed the distance value between the data1 and data2 and for computation I defined a function fKLDDist (I attached the image of the formula)but I found the error.
function [ fkld ] = fKLDDist( p,q )
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
fkld=sum(dot(p,log(p/q)));
end
the error is:
Error using dot (line 33)
A and B must be same size.
Error in fKLDDist (line 4)
fkld=sum(dot(p,log(p/q)));
Error in myFSmethod (line 56)
a18(i)=fKLDDist(thisCol1,thisCol2);
because I used dot(p,log(p/q)) in the function,matlab said A and B must be same size but I don't know how to make p and log(p/q) the same size.I'll be very gratefull to have your opinions. Thanks

Respuesta aceptada

Fabio Freschi
Fabio Freschi el 10 de Dic. de 2019
Try
fkld=sum(dot(p,log(p./q)));
with the element-wise division ./
  1 comentario
phdcomputer Eng
phdcomputer Eng el 11 de Dic. de 2019
@Fabio Freschi Thanks greatly for your attention. the problem of the function in my question is solved by your advice, but for one function It has error:
function [ fkdg ] = fKDivergence( p,q )
fkdg=sum(p.*(log((2.*p)/(p+q))));
end
I used element-wise for several functions and their errors solved.
I used element-wise operator .* in the codes but MATLAB shows this error
Error using .*
Matrix dimensions must agree.
Error in fKDivergence (line 5)
fkdg=sum(p.*(log((2.*p)/(p+q))));
I'll be very gratefull to have your opinion. Thankskd.jpg

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Logical en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by