fill a matrix within a loop

조회 수: 42 (최근 30일)
Enzo
Enzo 2023년 4월 29일
댓글: Enzo 2023년 4월 29일
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
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.
Enzo
Enzo 2023년 4월 29일
편집: Enzo 2023년 4월 29일
hi @Stephen23 , carefully cheking my first reply, you will find 2752 in the first line. Maybe it was not so clear
tr_x_ch = 2752 is the actual reply
I have attached the file to the question

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

채택된 답변

Stephen23
Stephen23 2023년 4월 29일
편집: Stephen23 2023년 4월 29일
"tr_x_ch = 2752 is the actual reply"
Then tr_x_ch is a scalar. The length of a scalar is exactly 1 (by definition), so your loop will iterate exactly one time.
If that is the case, you probably want this:
for col= 1:tr_x_ch
  댓글 수: 1
Enzo
Enzo 2023년 4월 29일
@Stephen23 that's exactly why I feel like it was really easy to solve, and I am still a noob in the way to become proficient in matlab. still a long way! Thanks so much

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

추가 답변 (1개)

Image Analyst
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.
  댓글 수: 1
Enzo
Enzo 2023년 4월 29일
@Image Analyst as @Stephen23 spotted in no time, my issue was way more stupid than one could thought. I was doing it wrong starting from the very first line. Sorry to wasted your time, but thanks for your efforts

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

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

제품


릴리스

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by