Portál AbcLinuxu, 4. května 2025 15:32
Řešení dotazu:
unsigned byte
tak zkusit nadefinovat proměnnou alespon long
.
s=sum(A(:))
whos A
, tak Octave vypíše, že typ je uint8. Tak to přetypuj na double, tj. A=double(A)
, a bude to fungovat dle očekávání.
Pokud je cílem sečtení nějakých nadprahových hodnot, tak ani tehdy by kód neměl obsahovat žádný for; což třebas takhle:
s=sum(A(A>127))
s
zapsat nějaké velké číslo nebo sečíst dvě velká čísla? 255 je samozřejmě maximum pro hodnotu v unsigned byte
a pokud více místa nemá, nic nepřičte, Otázka je proč si pro s rezervoval tak málo nebo jestli při té sčítací operaci nepřechází přes něco co mu provede limitaci.
% soucet prvku matice s=0; for i=1:1:10 for j=1:1:10 A(i,j)=i+j b=A(i,j) s=s+b end enda to b bude normální číslo. možná provádí nějaké inteligentní odhady datových typů a pro ty čísla z obrázku má právě datový typ
unsigned byte
.
% soucet matice A=imread("bakterieBW.tif"); s=0; for i=1:1:rows(A) for j=1:1:columns(A) b=A(i,j); s=s+b; end end disp(s)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.