MATLAB Answers

Filling in multidimensional array efficiently

조회 수: 48(최근 30일)
Haneen 23 Dec 2020
답변: James Tursa 23 Dec 2020
I need to fill in array of the size (900,1800,80,60) --> (tr,t,f,ch) through a for loop. In every iteration, I will get a bunch of data for a particular f and ch. This bunch, call it b, is the size of 50 by1800 and sometimes it is 49 by 1800.
array(?,:,f_1,ch_1) = b
I wish in each loop to fill in bunch b in my array. Is there an easy way to determine "?" in each loop? Alternatively, is there an easier way to fill in "array"?

  댓글 수: 0

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

채택된 답변

Matt J
Matt J 23 Dec 2020
If you want b to be inserted in the topmost rows of each array(:,:,f, ch), then it would be,
array(1:size(b,1),:,f, ch) = b

  댓글 수: 2

Haneen 23 Dec 2020
This looks good, the problem is that in the next iteration, the new b will erase the old b. I would like the "b's" to be inserted on top of each other
Matt J
Matt J 23 Dec 2020
In the next iteration, you will have a new f and ch, so each assignment will be to a new block of the array.

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

추가 답변(2개)

Hiro 23 Dec 2020
repmat may solve your issue - check up the link:

  댓글 수: 1

Haneen 23 Dec 2020
repmat is for copying an array and concatinating; but here I am filling new data in every iteration. I am not sure how would repmat be of an help. Would you please elaborate?

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

James Tursa
James Tursa 23 Dec 2020
Something like this maybe?
k = 1;
% your loop
b = r x 1800 matrix
f = whatever
ch = whatever
r = size(b,1);
array(k:k+r-1,:,f,ch) = b;
k = k + r;
% end loop
But it is not clear how f and ch change within the loop, so this might not work as written.

  댓글 수: 0

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



Community Treasure Hunt

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

Start Hunting!

Translated by