不同的唯一行
Different unique rows
我有一个函数可以在数组中找到具有重复数字的 ROWS 并将它们替换为唯一的行。
这是函数:
NVAR=唯一行中的参数数量
PVBu= 行中数字的上限
下限默认为 1
function [A]=nonrepeatuniquerow(A,NVAR,PVBu)
HM = zeros(1,NVAR);
p = zeros(1,PVBu);
for j = 1
p(1:PVBu) = 1:PVBu;
for k = PVBu:-1:PVBu-NVAR+1
q = ceil(k*rand);
HM(j,PVBu-k+1) = p(q);
p(q:k-1) = p(q+1:k);
end
end
b = any(~diff(sort(A,2),1,2),2) | any(A==0,2);
A(b,:) = repmat(HM,sum(b),1);
end
例如,
假设 [9 1 7] 是随机生成的唯一行。
矩阵A传递给函数'nonrepeatuniquerow'.
A= [2 3 3
2 5 2
1 5 9
9 7 6]
输出为:
A= [9 1 7
9 1 7
1 5 9
9 7 6]
我的问题是如何修改该函数,以便它用不同的唯一行替换具有重复编号的行?
例如输出可能如下:
A= [7 2 3
2 1 8
1 5 9
9 7 6]
下面的函数每次调用时只生成唯一的行。
NVAR=唯一行中的参数数量
PVBu= 行中数字的上限
下限默认为 1
function [HM]=generateunique(NVAR,PVBu)
HM = zeros(1,NVAR);
p = zeros(1,PVBu);
for j = 1
p(1:PVBu) = 1:PVBu;
for k = PVBu:-1:PVBu-NVAR+1
q = ceil(k*rand);
HM(j,PVBu-k+1) = p(q);
p(q:k-1) = p(q+1:k);
end
end
end
如果你能在解决这个问题上给我任何帮助,我将不胜感激?
在函数nonrepeatuniquerow
中,第一部分只是为了创建随机序列HM
。您可以 运行 遍历 for 循环中的所有非唯一行,并为每个行创建一个单独的 HM
。看起来像这样:
function [A]=nonrepeatuniquerow(A,NVAR,PVBu)
b = any(~diff(sort(A,2),1,2),2) | any(A==0,2);
for ii=find(b==1).'
HM = zeros(1,NVAR);
p = zeros(1,PVBu);
for j = 1
p(1:PVBu) = 1:PVBu;
for k = PVBu:-1:PVBu-NVAR+1
q = ceil(k*rand);
HM(j,PVBu-k+1) = p(q);
p(q:k-1) = p(q+1:k);
end
end
A(ii,:) = HM;
end
end
您还可以用内置的 randperm
函数替换 generateunique
函数或代码中执行相同操作的部分。您可以通过
创建一个独特的随机序列
HM = randperm(PVBu,NVAR);
这将为您提供以下代码
function A = nonrepeatuniquerow(A,NVAR,PVBu)
b = any(~diff(sort(A,2),1,2),2) | any(A==0,2);
for ii=find(b==1).'
A(ii,:) = randperm(PVBu,NVAR);
end
end
我有一个函数可以在数组中找到具有重复数字的 ROWS 并将它们替换为唯一的行。 这是函数:
NVAR=唯一行中的参数数量
PVBu= 行中数字的上限
下限默认为 1
function [A]=nonrepeatuniquerow(A,NVAR,PVBu)
HM = zeros(1,NVAR);
p = zeros(1,PVBu);
for j = 1
p(1:PVBu) = 1:PVBu;
for k = PVBu:-1:PVBu-NVAR+1
q = ceil(k*rand);
HM(j,PVBu-k+1) = p(q);
p(q:k-1) = p(q+1:k);
end
end
b = any(~diff(sort(A,2),1,2),2) | any(A==0,2);
A(b,:) = repmat(HM,sum(b),1);
end
例如,
假设 [9 1 7] 是随机生成的唯一行。
矩阵A传递给函数'nonrepeatuniquerow'.
A= [2 3 3
2 5 2
1 5 9
9 7 6]
输出为:
A= [9 1 7
9 1 7
1 5 9
9 7 6]
我的问题是如何修改该函数,以便它用不同的唯一行替换具有重复编号的行?
例如输出可能如下:
A= [7 2 3
2 1 8
1 5 9
9 7 6]
下面的函数每次调用时只生成唯一的行。
NVAR=唯一行中的参数数量
PVBu= 行中数字的上限
下限默认为 1
function [HM]=generateunique(NVAR,PVBu)
HM = zeros(1,NVAR);
p = zeros(1,PVBu);
for j = 1
p(1:PVBu) = 1:PVBu;
for k = PVBu:-1:PVBu-NVAR+1
q = ceil(k*rand);
HM(j,PVBu-k+1) = p(q);
p(q:k-1) = p(q+1:k);
end
end
end
如果你能在解决这个问题上给我任何帮助,我将不胜感激?
在函数nonrepeatuniquerow
中,第一部分只是为了创建随机序列HM
。您可以 运行 遍历 for 循环中的所有非唯一行,并为每个行创建一个单独的 HM
。看起来像这样:
function [A]=nonrepeatuniquerow(A,NVAR,PVBu)
b = any(~diff(sort(A,2),1,2),2) | any(A==0,2);
for ii=find(b==1).'
HM = zeros(1,NVAR);
p = zeros(1,PVBu);
for j = 1
p(1:PVBu) = 1:PVBu;
for k = PVBu:-1:PVBu-NVAR+1
q = ceil(k*rand);
HM(j,PVBu-k+1) = p(q);
p(q:k-1) = p(q+1:k);
end
end
A(ii,:) = HM;
end
end
您还可以用内置的 randperm
函数替换 generateunique
函数或代码中执行相同操作的部分。您可以通过
HM = randperm(PVBu,NVAR);
这将为您提供以下代码
function A = nonrepeatuniquerow(A,NVAR,PVBu)
b = any(~diff(sort(A,2),1,2),2) | any(A==0,2);
for ii=find(b==1).'
A(ii,:) = randperm(PVBu,NVAR);
end
end