Implicit expansion with empty arrays

1 visualizzazione (ultimi 30 giorni)
Matt J
Matt J il 21 Ago 2019
Commentato: Bruno Luong il 22 Ago 2019
I was just idly curious why scalar expansion of an empty array seems to work here (R2018a),
>> [1,2,3;4 5 6]-zeros(2,3,0)
ans =
2×3×0 empty double array
but not here,
>> [1,2,3;4 5 6]-zeros(2,0,0)
Error using -
Array dimensions must match for binary array op.

Risposta accettata

James Tursa
James Tursa il 21 Ago 2019
Modificato: James Tursa il 21 Ago 2019
In the 1st case, you are expanding a dimension of 1 (the 3rd dimension of the first operand) to 0, so it is scalar expansion.
In the 2nd case, you are trying to expand a dimension of 3 (the 2nd dimension of the first operand) to 0, so it is not scalar expansion ... it is simply a dimension mismatch.
  11 Commenti
Steven Lord
Steven Lord il 22 Ago 2019
Rik wrote: That is just a case where the name doesn't match the operation.
Yes, but "scalar {or implicit} expansion except when the size of the other operand in a particular dimension is 0 in which case it is scalar {or implicit} contraction" is a bit of a mouthful.
Bruno wrote: So if you apply your method to
rand(3,10) + rand(2,10);
you would get 6 x 10 result.
But how would those inputs be replicated? repmat style or repelem style? Collated or uncollated?
>> x = reshape(1:6, [2 3]);
>> x1 = repmat(x, [3 1]);
>> x2 = repelem(x, 3, 1);
>> isequal(x1, x2) % false
If you're replicating in a singleton dimension, they're the same. Collating multiple copies of a 1-page document is the same as not collating them.
>> y = 1:10;
>> isequal(repmat(y, 3, 1), repelem(y, 3, 1)) % true
Rik wrote: Personally, I would have voted for extending bsxfun to support more functions, instead of enabling implicit expansion for all operations.
You can pass a function handle that accepts two inputs into bsxfun.
>> fun=@(a,b) a+b;
>> A=1:5;B=A';
>> C1 = bsxfun(fun, A, B);
>> C2 = A + B; % Implicit expansion
>> isequal(C1, C2) % true
>> bsxfun(@besselj, A, B) % works
Bruno Luong
Bruno Luong il 22 Ago 2019
Steve: "But how would those inputs be replicated? "
Following Rik's method just above my post.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Operators and Elementary Operations 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