필터 지우기
필터 지우기

Generating a matrix with specific sums

조회 수: 1 (최근 30일)
Hylke Dijkstra
Hylke Dijkstra 2022년 1월 2일
댓글: Image Analyst 2022년 1월 3일
Dear all,
I am trying to generate a matrix based on specific sums. Let's say I generate the following matrix
X = randi([0 400], 6, 6);
Which gives me the matrix X. Now I want to sum x11 and x21, x12 and x22, x21 and x22, and so on. This should give me a 3x6 matrix. Does anyone have any clue how to do this effectively?
Best
  댓글 수: 4
Image Analyst
Image Analyst 2022년 1월 2일
Isn't that what I did in my Answer below?
Hylke Dijkstra
Hylke Dijkstra 2022년 1월 2일
Yes, it is! I wrote this reply before I noticed you helped out, thanks!

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

채택된 답변

Image Analyst
Image Analyst 2022년 1월 2일
The pattern is confusing, like Torsten says. Is this what you mean?
X = randi([0 400], 6, 6)
X = 6×6
395 191 150 346 373 27 235 335 369 34 49 224 158 234 266 205 264 328 382 31 302 279 44 131 86 393 156 130 331 188 260 137 229 312 185 345
X2 = [...
sum(X(1:2, :), 1); ...
sum(X(3:4, :), 1); ...
sum(X(5:6, :), 1); ]
X2 = 3×6
630 526 519 380 422 251 540 265 568 484 308 459 346 530 385 442 516 533
  댓글 수: 4
Hylke Dijkstra
Hylke Dijkstra 2022년 1월 2일
Thank you!
Image Analyst
Image Analyst 2022년 1월 3일
If you have some other even number of rows, you can use a for loop:
X = randi([0 400], 8, 3)
X = 8×3
350 342 147 234 99 127 16 366 80 136 333 267 227 281 388 127 313 179 313 213 244 207 62 4
[rows, columns] = size(X);
X2 = zeros(rows/2, columns);
newRow = 1;
for row = 1 : 2 : rows
X2(newRow, :) = sum(X(row : row+1, :), 1);
newRow = newRow + 1; % Increment pointer
end
X2 % Show in command window.
X2 = 4×3
584 441 274 152 699 347 354 594 567 520 275 248

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

추가 답변 (1개)

Paul
Paul 2022년 1월 2일
Another solution:
X = randi([0 400], 6, 6)
X = 6×6
201 154 330 38 350 3 65 77 370 157 11 316 97 86 189 251 231 29 233 238 74 4 248 64 374 336 400 168 244 26 377 339 53 90 291 364
kron(eye(3),[1 1])*X
ans = 3×6
266 231 700 195 361 319 330 324 263 255 479 93 751 675 453 258 535 390
  댓글 수: 7
Hylke Dijkstra
Hylke Dijkstra 2022년 1월 3일
Yes, thanks once again. I would like to be able to replicate what you did but also get the intuition behind it.
Paul
Paul 2022년 1월 3일
If you want to know more about the kron() function, start with its doc page.
Mathematically, all that's happening is matrix multiplication. Is that the part of the solution you're asking about?
FWIW, this solution probably isn't the most efficient what with all the multiplications by zero and summing up terms that are zero. Probably better to just pre-allocate the answer and use a simple loop over the sum() function (basically a minor extension of Image Analyst's solution) to fill in the rows of the anwer.

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

카테고리

Help CenterFile Exchange에서 Image Processing Toolbox에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by