Recently some folks at The MathWorks wondered about the difference of behavior of variable creation versus assigning values into an existing array. I thought I'd address this topic live from The MathWorks Aerospace and Defense Conference '07.
Here's a picture of the audience.
Why doesn’t changing an element of a logical array change its logicalness? Most arithmetic operations remove the logicalness from an array; it would seem to me that changing an element of the array (at least to something other than 0 or 1) should either throw an error or similarly modify its logicalness.
Let's show an example. First create a logical array.
clear all A = magic(3); B = A > 6; whos
Name Size Bytes Class Attributes A 3x3 72 double B 3x3 9 logical
Now let's do some arithmetic with logical arrays mixed with doubles.
C = B + 1; D = B; D(1:5) = 2 whos A B C D
D = 1 1 0 1 1 1 1 1 0 Name Size Bytes Class Attributes A 3x3 72 double B 3x3 9 logical C 3x3 72 double D 3x3 9 logical
What you see is that A and C are double arrays, while B and D are logical.
Indexed assignment, that is, D(1:5) = 2 has always preserved the type of the array being indexed. Only values may change, not the type. You'd only get an error if there was not a valid conversion routine from the type on the right-hand side to the type stored on the left.
If you simply concatenate values, you also find that the output is logical:
E = [D ; B]
E = 1 1 0 1 1 1 1 1 0 1 0 0 0 0 1 0 1 0
To see this with another datatype, let's look at string array.
firstname = 'Loren' lastname = [83 104 117 114 101] name = firstname name(end+2:end+1+length(lastname)) = lastname
firstname = Loren lastname = 83 104 117 114 101 name = Loren name = Loren Shure
If I just use straight concatenation, here's what happens
newname = [firstname, ' ', lastname]
newname = Loren Shure
If I perform arithmetic between mixed types, where one is numeric and one is not, I instead get a numeric answer.
name - 32
ans = Columns 1 through 8 44 79 82 69 78 -32 51 72 Columns 9 through 11 85 82 69
The fact that you get results with different datatypes depends on whether you are doing a numerical calculation or assigning to an array. Has the behavior been what you need or have you found it confusing? Let me know here.
Get the MATLAB code
Published with MATLAB® 7.4
To leave a comment, please click here to sign in to your MathWorks Account or create a new one.