Inner matrix dimensions must agree
    8 views (last 30 days)
  
       Show older comments
    
    phdcomputer Eng
 on 10 Dec 2019
  
    
    
    
    
    Commented: Image Analyst
      
      
 on 11 Dec 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);
    a24(i)=fkumarjohnson(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 fkumarjohnson (I attached the image of the formula)but I found the error.
function [ fkj ] = fkumarjohnson(p,q )
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here
fkj=sum(((p*p-q*q).^2)/(2*(dot(p,q)).^(3/2)));
end
the error is:
Error using  * 
Inner matrix dimensions must agree.
Error in fkumarjohnson (line 4)
fkj=sum(((p*p-q*q).^2)/(2*(dot(p,q)).^(3/2)));
Error in myFSmethod (line 62)
  a24(i)=fkumarjohnson(thisCol1,thisCol2);
The matlab said the inner matrix dimensions of two sides of * must agree but I don't know how to make their dimensions equal.I'll be very gratefull to have your opinions. Thanks
2 Comments
Accepted Answer
  Fabio Freschi
      
 on 10 Dec 2019
        fkj= sum(.5*((p.^2-q.^2).^2)./((p.*q).^1.5));
Note that .^ .* and ./ operators are used for element-wise operation (see also Stephen's comment).
Note also that dot can give apparently unexpected results for complex inputs (see dot help)
4 Comments
More Answers (1)
  Image Analyst
      
      
 on 11 Dec 2019
        The error is described in the FAQ
3 Comments
  Image Analyst
      
      
 on 11 Dec 2019
				Cell arrays were the first FAQ entry.  The link I gave you should have sent you directly to the error on "Inner dimensions must agree".  It does for me.  Perhaps you didn't give it enough time to scroll to the right part of the page.  
Anyway the error was caused by you trying to do a matrix division instead of an element-by-element division.  Using ./ like Fabio said will fix it.
See Also
Categories
				Find more on Matrix Indexing in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!