fill a matrix within a loop
이전 댓글 표시
Hello everyone,
I am growing more confident in Matlab, thanks to community support, but sometimes I feel stucked due to very silly issues, as per the following case:
matr_counts_per_chunk = zeros(120,2752);
for col= 1:length(tr_x_ch)
matr_mat_fil_non_bool_sigle_tr = resh_matr_mat_fil_non_bool(:,col);
matr_counts_per_chunk(:,col) = sum(reshape(matr_mat_fil_non_bool_sigle_tr,[],250),2);
end
the problem is: matr_counts_per_chunk is only correctly filled in the first iteration, then I get only zeros in every 2751 left columns. This mean the for loop is actiually doing nothing/not working except for the first call.
Any help will be appreciated
댓글 수: 7
Stephen23
2023년 4월 29일
What size does tr_x_ch have?
Enzo
2023년 4월 29일
Image Analyst
2023년 4월 29일
@Enzo you don't need to increment col at the bottom of the for loop. It's unnecessary since the for loop will do that for you, and in fact, whatever you do to col is only in effect during the loop and when the loop starts a new iteration, it makes col what it should be. Bottom line, don't change col in the loop.
If you have any more questions, then attach your data (resh_matr_mat_fil_non_bool and tr_x_ch ) and code to read it in with the paperclip icon after you read this:
save('answers.mat', 'resh_matr_mat_fil_non_bool', 'tr_x_ch');
Then attach 'answers.mat' with the paperclip icon.
Enzo
2023년 4월 29일
Enzo
2023년 4월 29일
Stephen23
2023년 4월 29일
"In the attachemnts you will find the actual matrix in order to run the code yourself. "
Nope: you did not include tr_x_ch as Image Analyst requested, nor have you described its size as I requested.
채택된 답변
추가 답변 (1개)
Image Analyst
2023년 4월 29일
Here's what I get, after adding comments and clarifying the variable names.:
fileName = 'resh_matr_mat_fil_non_bool.mat';
load(fileName) % Load "resh_matr_mat_fil_non_bool" from a .mat file.
% resh_matr_mat_fil_non_bool is a 30,000 row by 2752 column 2-D matrix.
[rows, columns] = size(resh_matr_mat_fil_non_bool)
tr_x_ch = zeros(rows, 1); % A 2752 column vector.
% Preallocate a matrix.
matr_counts_per_chunk = zeros(120, 2752);
for col = 1 : columns
% Get data into a 30,000 by 1 column vector.
thisColumn = resh_matr_mat_fil_non_bool(:, col);
% Reshape into 120 rows by 250 columns.
matrix2d = reshape(thisColumn, [], 250);
% Sum the matrix across, getting a 250 row by 1 column vector
% and put the sums into the column of matr_counts_per_chunk;
matr_counts_per_chunk(:, col) = sum(matrix2d, 2);
end
fprintf('Done!\n')
matr_counts_per_chunk has values all over the matrix, not just in the first column, so I can't reproduce what you said. It basically does what you tell it to.
카테고리
도움말 센터 및 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!