我有一个时变16*1
向量,我想在每个时刻从这个向量中随机选择11个元素。但我希望连续时间之间挑选的元素尽可能不同。例如,如果在时间1:11
选择了元素t
,我希望元素12:16
绝对是时刻t+1
中所选元素之一。从t+1
到t+2
应该满足相同的条件,依此类推。
这是我已经尝试过的:
N=16;
M=11;
for t=1:96
x(:,:,t)=randn(N,1)
end
for t=1:96
E = eye(M,N);
Phi(:,:,t)=E(randperm(M),randperm(N));
end
for t=1:96
y(:,:,t)=Phi(:,:,t)*x(:,:,t);
end
并在我的Phi(:,:,t)
向量时间16*1
倍增t(x(t))
。
但这完全是随机的,并没有考虑两个连续时刻之间的各种选择。事实上,每个x(:,:,t)
包含16个传感器节点的读数,我希望所有这些传感器节点在两个时间点之间生成测量y(:,:,t)
时发挥作用。 我必须在时间段t:t+1
内获得所有16个传感器节点的读数。我不希望在[t:t+1]
中遗漏一个传感器读数。我感谢任何帮助。
答案 0 :(得分:2)
所以你有N=16
个元素,并且每次都选择M=11
。这意味着在时间N-M
和时间t+1
,最多只有t
个元素不同,并且您将重叠M-(N-M)
。
M = 11;
N = 16;
idx = 1:N; % All numbers to choose from
r = randperm(N, M); % Choose 11 random elements from 16 to start
for t = 1:10
previouslypicked = ismember(idx,r); % Get elements which aren't in previous choice
rnew = idx(~previouslypicked); % Start off with elements not previously picked
r = [rnew, r(randperm(M, M-(N-M)))] % Append random selection of other elements
end
示例:
% Initial vector from r = randperm(N,M)
r = [2 7 8 11 14 9 15 16 1 13 5];
% After one iteration
r = [3 4 6 11 12 2 8 10 13 9 16];
第一个向量缺失[3,4,6,10,12]
,它们都包含在第二个向量中。第二个向量中的其他元素是随机的,与手动选择的元素不同,因为它们先前不存在。
因此,所有元素都会在任意两次连续迭代t:t+1
之间进行计算。
当然,这可以在一行中完成。为清楚起见,我只分析了一些内容,此示例还包括生成Phi
:
M = 11; N = 16; T = 96; idx = 1:N;
r = randperm(N, M);
Phi = zeros(M, N, T);
for t = 1:T
r = [idx(~ismember(idx,r)), r(randperm(M, M-(N-M)))];
% Get Phi, which is M*N*T with 1 in each row & at most 1 in each column, for each t
E = zeros(M,N); % Set up zeros matrix
E(sub2ind([M,N], 1:M, r)) = 1; % Set desired elements to 1, satisfying Phi format
Phi(:,:,t) = E; % Assign to layer of Phi
end
同样,这可以在一行中完成,无需E
。
M = 11; N = 16; T = 96; idx = 1:N;
r = randperm(N, M);
Phi = zeros(M, N, T);
for t = 1:T
r = [idx(~ismember(idx,r)), r(randperm(M, M-(N-M)))];
Phi(sub2ind([M,N,T], 1:M, r, ones(1,M)*t)) = 1;
end