Случайные числа за периоды (с использованием логики) - PullRequest
1 голос
/ 22 ноября 2011

С кодом ниже:

t=10;
period=9;
A=zeros(36,36,t);
for j=1:t
   A(7:period:end,7:period:end,j)=rand(1,1);
   A(8:period:end,8:period:end,j)=rand(1,1);
   A(9:period:end,9:period:end,j)=rand(1,1);
end

Редактировать: Это А. Я визуально разделил их на 9x9, чтобы было легче увидеть рисунок.

0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0   0 0 0 0 0 0 1 0 0   0 0 0 0 0 0 1 0 0   0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0   0 0 0 0 0 0 0 1 0   0 0 0 0 0 0 0 1 0   0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1   0 0 0 0 0 0 0 0 1   0 0 0 0 0 0 0 0 1   0 0 0 0 0 0 0 0 1

0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0   0 0 0 0 0 0 1 0 0   0 0 0 0 0 0 1 0 0   0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0   0 0 0 0 0 0 0 1 0   0 0 0 0 0 0 0 1 0   0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1   0 0 0 0 0 0 0 0 1   0 0 0 0 0 0 0 0 1   0 0 0 0 0 0 0 0 1

0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0   0 0 0 0 0 0 1 0 0   0 0 0 0 0 0 1 0 0   0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0   0 0 0 0 0 0 0 1 0   0 0 0 0 0 0 0 1 0   0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1   0 0 0 0 0 0 0 0 1   0 0 0 0 0 0 0 0 1   0 0 0 0 0 0 0 0 1

0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0   0 0 0 0 0 0 1 0 0   0 0 0 0 0 0 1 0 0   0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0   0 0 0 0 0 0 0 1 0   0 0 0 0 0 0 0 1 0   0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1   0 0 0 0 0 0 0 0 1   0 0 0 0 0 0 0 0 1   0 0 0 0 0 0 0 0 1

Я бы хотел сделать каждое число с меткой 1 случайным числом от 0 до 1. Нужно ли создавать вектор (48,1), а затем вставлять значения, где 1??


Конечно, числа не совсем случайные, одни и те же три случайных числа воспроизводятся каждый «период».

Существует ли простой способ создания случайных чисел, чтобы каждое случайное значение было случайным?

Большое спасибо.

1 Ответ

2 голосов
/ 22 ноября 2011

Сначала было немного сложнее, чем я думал. Вот мое решение, хотя:

A = zeros(36,36,t);
idx = sub2ind([36 36 t],repmat(34:36,1,t),repmat(34:36,1,t),repmat(1:t,1,3));
A(idx) = rand(length(idx),1);

Решение с логической индексацией:

A(logical(A)) = rand(nnz(A),1);

Но вы должны подготовить A в качестве двоичной матрицы, приведенной в вопросе.

...