Array Exponentials without For Loop?
조회 수: 1 (최근 30일)
이전 댓글 표시
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
채택된 답변
Jan
2021년 6월 17일
A = [1 2 3];
B = [2 3];
C = A .^ (B.')
댓글 수: 4
Jan
2021년 6월 18일
@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.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!