how to split a large matrix into smaller matrices and assign random values

3 Ansichten (letzte 30 Tage)
I have a 180x180 matrix of 0's and I was to assign different range of random integers to each 45x45 set in the matrix. I have show the example output that I want for a much smaller matrix (10x10) that breaks it up into 5x5 matrices of different random values below. Any easy way to do this that doesn't involve a million for loops? I just want to expand this code to an N = zeros(180,180) type deal with 45x45 subparts.
N = zeros(10,10);
for i = 1:5
for j = 1:5
N(i,j) = randi([1,10]);
end
end
for i = 1:5
for j = 6:10
N(i,j) = randi([15,100])
end
end
for i = 6:10
for j = 6:10
N(i,j) = randi([1,17])
end
end
for i = 6:10
for j = 1:5
N(i,j) = randi([100,250])
end
end
N

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 27 Feb. 2017
low_vals = [1 15 1 100;
8 -4 17 3;
1 2 9 15;
0 -8 3 72];
high_vals = [10 100 17 250;
14 11 84 9;
33 11 99 222;
4 -3 88 105];
N = cell2mat( arrayfun(@(L, H) randi([L, H], 45, 45), low_vals, high_vals, 'Uniform', 0) );
The above would create 4 x 4 of 45 x 45 subblocks.
  3 Kommentare
Walter Roberson
Walter Roberson am 27 Feb. 2017
Did you run the above code? It creates a 180 x 180 matrix in which each 45 x 45 (non-overlapped) sub-block is based on randi() between the corresponding low value and high value. For example, the third sub-block over on the second row of sub-blocks would be based on randi([17, 84], 45, 45) in the above demonstration code.
Andrew Poissant
Andrew Poissant am 27 Feb. 2017
Nvm, I was able to use the cell2mat for my question. Thanks!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by