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

4 次查看(过去 30 天)
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

采纳的回答

Walter Roberson
Walter Roberson 2017-2-27
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 个评论
Walter Roberson
Walter Roberson 2017-2-27
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.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by