# Integers can only be combined with integers of the same class, or scalar doubles

166 visualizzazioni (ultimi 30 giorni)
Neo il 22 Dic 2015
Modificato: DGM il 26 Ago 2024 alle 15:02
Error using - Integers can only be combined with integers of the same class, or scalar doubles.
Error in Code (line 27) data = data - repmat(mn,1,N);
Here is the code snip, where I am subtracting off the mean of some matrices:
mn = mean(data,2);
data = data - repmat(mn,1,N);
I tried casting the new data matrix to an int16 but that gave the same error, not sure what to cast it to, to avoid error.
##### 3 CommentiMostra 1 commento meno recenteNascondi 1 commento meno recente
jgg il 22 Dic 2015
Modificato: jgg il 22 Dic 2015
Are the matrices square? If they're not square, the * operator is matrix multiplication, if they're like NxM this is asking Matlab to do NxM * NxM which doesn't work. If you want to multiply them component-wise, the operator is .*.
See here for example.
jgg il 22 Dic 2015
I think you should post another question to cover this, and give more background. I don't really understand what you're trying to do here, so you might want to explain very precisely what you're trying to accomplish, and what the objects you're working with are. (For instance, why are you trying to get the eigenvalues of a non-square matrix? Which operation made it non-square; it wasn't subtracting off the means.)

Accedi per commentare.

### Risposta accettata

jgg il 22 Dic 2015
Modificato: jgg il 22 Dic 2015
Try setting data = double(data) first.
##### 2 CommentiMostra NessunoNascondi Nessuno
Neo il 22 Dic 2015
Oh wait, why did the matrix have to be casted into a double, I know because we didn't want the error, but why have an error in the first place?
Chittaranjan Mohapatra il 22 Apr 2020
Yes It Works

Accedi per commentare.

### Più risposte (2)

sai kumar il 24 Ott 2017
Modificato: sai kumar il 24 Ott 2017
Error using mod
Integers can only be combined with integers of the same class, or scalar doubles.
Error in trial>decryption_Callback (line 457) m1(l)=mod(c2,n); code: c1=reshape(c,1,[]); s=numel(c1); m1=c1; c2=c1; for l=1:s c2(l)=c1(l)^msk; m1(l)=mod(c2,n); end
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

lokesh kumar il 24 Giu 2020
Modificato: DGM il 26 Ago 2024 alle 15:02
Error???????????????????????
%rough dark channel computation%
[ht,wt,~]=size(a);
patchSize=15;
JDark=zeros(ht,wt);
for i=1:ht
for j=1:wt
JDark(i,j)=min(patch(:));
end
end
atmSum=zeros(1,3);
imsize=ht*wt;
numpx=floor(imsize/1000);
JDarkVec=reshape(JDark,imsize,1);
ImVec=reshape(a,imsize,3);
[JDarkVec,indices]=sort(JDarkVec);
indices=indices(imsize-numpx:end);
atmSum=zeros(1,3);
for ind=1:numpx
atmSum=atmSum+ImVec(indices(ind),:);
end
A=atmSum/numpx;
figure;
imshow(uint8(A));
So what is the problem with the atmSum, it is not working. Anybody wants to solve this problem are always welcome.
or email me: lokesh.singh.in@gmail.com
Thanks
##### 1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
DGM il 26 Ago 2024 alle 15:01
Since the intermediate sum will exceed the dynamic range of the original integer class, do the accumulation in float. This avoids mixed class arithmetic problems, and it avoids truncation.
ImVec = double(ImVec);

Accedi per commentare.

### Categorie

Scopri di più su Graphics Object Programming in Help Center e File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by