提问人:Michaela Schnell 提问时间:11/10/2023 最后编辑:Michaela Schnell 更新时间:11/11/2023 访问量:31
在倍频程中编写校验码和for循环,以检查向量的最大差值
Writing check codes and for loops in octave to check max differences of vectors
问:
我用八度音程编写了以下代码,其中 cb1-cb27 是向量,我想检查每个向量之间所有可能的差异。然后我想检查它们之间的最大差异是什么。如果最大差值为 <= 1,那么我希望检查停止并告诉我。我想知道是否可以将最大值为 1 的差分向量放入新矩阵中。到目前为止,我所拥有的还没有完全起作用,想知道是否有人有任何提示。我基本上没有八度的经验。这是针对个人研究项目,而不是家庭作业。
X = [cb1(:), cb2(:), cb3(:), cb4(:), cb5(:), cb6(:), cb7(:), cb8(:), cb9(:), cb10(:), cb11(:), cb12(:), cb13(:), cb14(:), cb15(:), cb16(:), cb17(:), cb18(:), cb19(:), cb20(:), c. b21(:), cb22(:), cb23(:), cb24(:), cb25(:), cb26(:), cb27(:)];
Y = zeros(size(X,1),size(X,2),size(X,2));
for j = 1:size(X,2)
for k = 1:size(X,2)
Y(:,j,k) = abs(X(:,j) - X(:,k));
end
end
T=zeros(size(X,2), size(X,2));
for j= 1:size(X,2)
for k=1:size(X,2)
T(j,k)=max(Y(:,j,k));
if j==k
T(j,k)=10;
end
end
end
min(min(T))
check=0;
for j=1:
for k= 1:
if max(Y(:j,k)) <= 1
check =1;
check
有关我尝试过的内容,请参阅上面的代码。
答:
0赞
Cris Luengo
11/11/2023
#1
您可以按如下方式计算没有循环的差分矩阵:Y
Y = permute(X, [2,3,1]) - permute(X, [3,2,1]);
这有沿 3 维的向量,稍后会很方便。这确实将向量与自身进行比较,并且还将每对进行比较两次。
现在我们要计算每个向量对的最大绝对差:
T = max(abs(Y), [], 3);
现在是向量和 之间的最大绝对差。T(i,j)
X(:,i)
X(:,j)
要找出哪些差值不大于 1,只需比较: 。
我们可以使用 或 删除重复的条目和对角线:T<=1
tril
triu
T = triu(T <= 1, 1);
如果您需要向量对的索引,请结合使用:find
ind2sub
[i, j] = ind2sub(size(T), find(T));
现在 和 是一对满足差值约束的向量。X(:,i[p])
X(:,j[p])
评论
Y
max(abs(cb1-cb2))
<=1