Aloha!
I have a relatively big array (sorted_celldata) with all my data (12 columns, 248976 rows), its contains data from the follow up of 23819 cells through the time.
I would like to simplify the access to the data by generating an array for each single cell (the id of each cell in in column 12 of sorted_celldata), and then store them in a 3 dimension array.
Here my code:
for p=1:max(sorted_celldata(:,12))
cell_idxlist = find (sorted_celldata(:,12) == p); % to look in which line I have data from cell p
celldata = sorted_celldata (cell_idxlist,:); % to generate a array with all data from cell p
nb_of_rows = size (celldata,1); % I put this line because of the error message below, trying to adjust the since of the arrays
nb_of_columns = size (celldata,2); % I put this line because of the error message below, trying to adjust the since of the arrays
celldata_arrays (nb_of_rows,nb_of_columns,p) = [celldata]; % here I generate my 3 dimension arrays, where each 3rd dimension is an array containing the data of a specific cell
end
Unfortunately, here the error message that I get:
Unable to perform assignment because the indices on the left side are not
compatible with the size of the right side.
Error in untitled9 (line 6)
celldata_arrays (nb_of_rows,nb_of_columns,p) = [celldata]

 채택된 답변

Sudheer Bhimireddy
Sudheer Bhimireddy 2020년 8월 6일
편집: Sudheer Bhimireddy 2020년 8월 6일

0 개 추천

You are changing the array size which is not how you do to store something. You are trying to store multi-dimensional array in a single field, that's why you are getting that error.
Choice 1:
% Change this line
celldata_arrays (nb_of_rows,nb_of_columns,p) = [celldata];
% to
celldata_arrays (nb_of_rows,nb_of_columns,p) = 0;
celldata_arrays (:,:,p) = celldata;
This way you will have empty fields whenever nb_rows and nb_columns is greater than previous values.
Choice 2:
celldata_arrays {p,1} = celldata;
Hope this helps.

댓글 수: 4

chann lagadec
chann lagadec 2020년 8월 7일
Thanks Sudheer,
I put this code now:
for p=1:max(sorted_celldata(:,12))
cell_idxlist = find (sorted_celldata(:,12) == p);
celldata = sorted_celldata (cell_idxlist,:);
nb_of_rows = size (celldata,1)
nb_of_columns = size (celldata,2)
celldata_arrays (nb_of_rows,nb_of_columns,p) = 0;
celldata_arrays (:,:,p) = celldata;
end
It's going 1 for loop correctly, but I got an error for the second loop (since size of the second array is different... If I understand correctlu-y, it should have put 0 on the empty fields):
"Unable to perform assignment because the size of the left side is 100-by-12 and
the size of the right side is 75-by-12.
Error in untitled9 (line 11)
celldata_arrays (:,:,p) = celldata; "
Since I can have a maximum of 120 rows, I wrote this code:
for p=1:max(sorted_celldata(:,12))
cell_idxlist = find (sorted_celldata(:,12) == p);
celldata = sorted_celldata (cell_idxlist,:);
celldata_arrays (120,12,p) = 0;
celldata_arrays (:,:,p) = celldata;
end
But it does not even run through the first loop:
Unable to perform assignment because the size of the left side is 120-by-12 and
the size of the right side is 75-by-12.
Error in untitled9 (line 11)
celldata_arrays (:,:,p) = celldata;
Thanks for your precious help
chann lagadec
chann lagadec 2020년 8월 7일
I just try the second solution... and bigo, it's working just find!!!!
Thanks a lot for your help.
madhan ravi
madhan ravi 2020년 8월 7일
bigo , find??
chann lagadec
chann lagadec 2020년 8월 7일
sorry... "Bingo" (meaning "jackpot")
It's working perfectly, I could start the analyse... It's actually running... heating up my computer while it's already 34°C in the room (hot weather today!)

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

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Logical에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by