Subtraction of two single-precision arrays reuslts in an integer (?) array

I have two 512x512 single-precision arrays (frame_1 and frame_2). Typing the name of either of these in the console shows the block of expected 5-digit numbers: 2.1799, -1.1602, 2.7134, 0.6899, ...
When I try to take the difference (frame_diff = frame_2 - frame_1), the displayed frame_diff array now shows as all integers, even though Matlab claims it's also a single (as it should be!). I thought it was just a console display issue, but when I try options such as format shortEng, the frame_diff numbers indeed seem to be integers (or at least rounded floats!).
What gives? I found nothing in the Matlab array subtraction documentation that would explain what's happening here. The same thing happens with minus(frame_1, frame_2), by the way.

4 Kommentare

If you want serious help, then you need to post a .mat file that contains the two arrays. Otherwise anybody would just be making wild guesses as to what you have. Attach a .mat file to your question or to a comment.
And, of course, if all elements of the two when subtracted are apparently integer, don't need all 512x512 but just a small subset will suffice just as well.
Hello John & dpb - thanks for the suggestion. I've attached a file with the arrays I described. Let me know what you think.
"the displayed frame_diff array now shows as all integers, even though Matlab claims it's also a single "
There is no contradiction here: some display formats do not show trailing zeros, even for floating point numbers. Try it yourself:
>> format short
>> single(pi)
ans =
3.1416
>> single(3)
ans =
3
>> format shorteng
>> single(pi)
ans =
3.1416e+000
>> single(3)
ans =
3.0000e+000

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Values in your arrays frame_1 & frame_2 are such that, difference is always a whole number (fraction part is 0). So they appear as integer.
For example:
frame_1(1,1) --> -0.8467
frame_2(1,1) --> 3.1533
frame_1(1,1) - frame_2(1,1) --> -4
frame_1(1,2) --> -5.9399
frame_2(1,2) --> -0.9399
frame_1(1,2) - frame_2(1,2) --> -5
frame_1(1,3) --> 6.8799
frame_2(1,3) --> -4.1201
frame_1(1,3) - frame_2(1,3) --> 11

3 Kommentare

fdiff = frame_1 - frame_2;
any(any(fdiff ~= round(fdiff)))
ans =
logical
0
So there are no elements where the difference is not an exact integer.
It just looks funny for elements like the first where have to add owing to sign of both being <0 and it's not visual without thinking of the actual operation as in the case of the second.
Clearly the two files were closely linked somehow in whatever it was that generated the values but the symptom is real given the data.
Paul Fini
Paul Fini am 2 Okt. 2018
Bearbeitet: Paul Fini am 2 Okt. 2018
Thanks, TAB! This hadn't occurred to me, but it may be due to the nature of these two arrays. This gives me some peace of mind that it's the data itself and not some funky Matlab number typing that I didn't understand (that's happened before!).
I'll do some checking to verify on my end and follow up with any questions if needed.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte

Version

R2018a

Gefragt:

am 1 Okt. 2018

Kommentiert:

am 2 Okt. 2018

Community Treasure Hunt

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

Start Hunting!

Translated by