Store sets of values as indices in a matrix?

조회 수: 7 (최근 30일)
BOB
BOB 2018년 9월 10일
댓글: BOB 2018년 9월 10일
Hi,
I have a function which produces a set of horizontal and vertical graph axes intercepts. There are 120 sets of these intercepts:
for Z = 1:120
hrz = hix(x(:,Z),mb(:,Z))'; %[X Y] Matrix of horizontal intercepts
vrt = vix(y(:,Z),mb(:,Z))'; %[X Y] Matrix of vertical intercepts
end
I want to store each of these sets of intercepts in a matrix, i.e. I want to be able to call the second set of intercepts by simply calling matrix(2).
Is anyone aware of a way to achieve this?
Thanks

채택된 답변

Guillaume
Guillaume 2018년 9월 10일
I'm assuming that hix and vix are functions, and I'm assuming that for each pair of vector input, they each return a vector of the same size as the input. In which case,
hrz = zeros(size(x)); %predeclare output matrix
vrt = zeros(size(x));
for Z = 1:120
hrz(:, Z) = hix(x(:, Z), mb(:, Z));
vrt(:, Z) = vix(y(:, Z), mb(:, Z));
end
  댓글 수: 6
Guillaume
Guillaume 2018년 9월 10일
store the different length vector of each iteration of the loop in a single matrix.
Ah! That needed explaining in the question. By definition, a matrix has the same number of rows/columns for each column/row. So you can't store results of varying length in a matrix unless you pad the shorter ones (which is rarely a good approach).
You can store the results in a cell array though:
hrz = cell(1, size(x, 2)); %preallocate output
vrt = cell(1, size(x, 2));
for Z = 1:size(x, 2) %better not to hardcode the size
hrz{Z} = hix(x(:, Z), mb(:, Z));
vrt{Z} = vix(y(:, Z), mb(:, Z));
end
BOB
BOB 2018년 9월 10일
That works perfectly! Thanks for the persistence, I'll make sure to be more clear next time.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Symbolic Math Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by