Generating a matrix with specific sums

2 ビュー (過去 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 件のコメント
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 件のコメント
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 件のコメント
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.

サインインしてコメントする。

Community Treasure Hunt

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

Start Hunting!

Translated by