【问题标题】:How do I compare of two arrays in matlab? [duplicate]如何比较matlab中的两个数组? [复制]
【发布时间】:2013-07-16 14:40:10
【问题描述】:

我有一个像 x 这样的数组,我想对它做一些工作并将结果放入新的数组 y 中。那么我应该比较这两个。如果它们是相同的(即它们可能有点不同),那没关系,算法结束,否则我应该继续迭代 问题是比较这两者。 它们是一个包含未知元素的两个二维数组。 我已经做了两种不同的方式,但没有一个可以: 第一种方式:

d = x - y
if d < 5 
   disp('end')
end

等等
但它不能很好地工作,老实说它根本不起作用
我使用的另一种方式是:

isequal(x,y)

虽然它们相同,但它会返回 0,但如果它们不同,即使有一点差异,结果也会为 1,这是不正确的,因为我说过算法应该考虑一点点差异并停止迭代 我该怎么办?

【问题讨论】:

  • 第一次尝试不应该是if d&lt;5吗?

标签: arrays matlab comparison


【解决方案1】:

如果 5 是一个 OK 阈值,那么这应该可以工作:

d=abs(x-y);
if all(d<5)
    disp('end')
end

如果您不知道阈值是多少,那么这是一个非常不同的问题。确定一个合理的阈值取决于您的应用程序,并且通常是一种权衡——如果您的数据是可变的,则可能没有“正确”的答案。查看一些基本统计数据 - zscore 命令可能是一个有用的开始。

【讨论】:

  • 它不起作用,答案数组得到了 30 40 22 等数字,但它接受 d
  • 你能显示数组的详细信息吗? xy 的代码?没有更多细节我帮不了你!
  • 我的代码太长太复杂了,如果我把它的一部分放在这里是可以理解的,反正代码是:k=44;%k group n=556;%all elements r=12;%组中的元素 b=1;%第 k 组中第 1 组数据的列号。每组拥有一行。 a 是一个元胞数组 a=grouhbandi(n,k); e1=Ks(a,k); %每行a的第一个元素是k的意思,e1是数组i=0; had=1000;%limit 在 had>5 时停止迭代 a=Ekmeans(a,k,r); a=newks(a,k);%这两个代码计算新的k组 e2=Ks(a,k);%这是将分配在e2中的新Ks had=e2-e1;有=绝对(有);结束
  • 如果 e1 和 e2 是向量,则需要使用 while any(had>5),否则即使单个元素的差值小于 5,您的循环也会在您希望之前完成.
【解决方案2】:

检查差分向量的另一种方法是在 MATLAB 中使用“find()”函数。作为诺兰,我认为你最好使用差异的绝对值。 idx = find(abs(a-b)&gt;threshold) 将为您提供超过阈值的索引。如果为 null,则终止迭代。

【讨论】:

    猜你喜欢
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2021-06-14
    • 2017-11-11
    • 2021-04-29
    • 1970-01-01
    相关资源
    最近更新 更多