Array Exponentials without For Loop?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Alec Huynh
el 17 de Jun. de 2021
Comentada: Alec Huynh
el 25 de Jun. de 2021
Hello, I hope you are doing well! I am not entirely sure how to succinctly describe the question I have, so I will instead demonstrate it.
Let's say I have two arrays:
A = [1 2 3];
B = [2 3];
I would like to do the operation A^B such that I would receive a 2D array C containing the solution of A.^B(1) and A.^B(2).
C(1,:) = A.^B(1);
C(2,:) = A.^B(2);
C = [1 4 9; 1 8 27];
I understand that I could write a For loop like this:
% Full Loop Code
A = [1 2 3];
B = [2 3];
C = zeros(length(B), length(A));
for i = 1: length(B)
C(i, :) = A.^B(i);
end
But I am interested in knowing how to do this using only vectors and not using a For loop. When I do:
C = A.^B
I receive this error:
Error using .^
Matrix dimensions must agree.
Any suggestions? I am using MATLAB 2016b.
Thank you!
0 comentarios
Respuesta aceptada
Jan
el 17 de Jun. de 2021
A = [1 2 3];
B = [2 3];
C = A .^ (B.')
4 comentarios
Jan
el 18 de Jun. de 2021
@Alec Huynh: Thanks, @Steven Lord, for the explanation. An addition, why I've used .' in this case: For real arrays .' and ' produce the same result. It is a good programming practice to avoid assumptions of the inputs, so if I want to transpose the input, .' is the correct operator. Then I do not have to guess, if you (or any other use) is working with real or complex values.
This is the same strategy as e.g. specifying the dimension to operate on:
x = rand(randi(1:3, 2)); % e.g. [1,3], [2,1] or [3,2]
y = sum(x) % ?!? critical: input might be a column or row vector
y = sum(x, 1) % Avoid assumptions
The less assumptions the programmer includes in the code, the less likely is producing a bug or misleading output.
Más respuestas (0)
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!