【问题标题】:how to check if all elements in an array are 1 or -1 in Matlab如何在Matlab中检查数组中的所有元素是1还是-1
【发布时间】:2018-06-21 20:14:27
【问题描述】:

我想检查数组中的所有元素是 1 还是 -1,如果其中一个仍然是除 1 或 -1 之外的任何值,则函数应该继续。我写了这段代码:

while (all(initial_color(:))~=1 || -1 )

THE FUNCTION

end

Initial_color 是数组的名称。 但它不能正常工作,因为我可以看到所有元素都变为 1 或 -1 但它仍然运行该函数。我是Matlab的新手,你能帮我吗? 提前致谢。

【问题讨论】:

  • 我从未使用过 Matlab,但从该语句的外观来看,它是否可能正在评估 (all(initial_color(:))~=1) OR (-1),并采用 - 1 表示 TRUE?你可以尝试运行它:all(initial_color(:))~=1 AND all(initial_color(:))~=-1 看看它是否有效。

标签: matlab matlab-guide matlab-deployment matlab-compiler


【解决方案1】:

测试条件如下:

all( initial_color==1 | initial_color==-1 )

这里创建了两个数组,一个对所有值为 1 的元素都为真,一个对所有值为 -1 的元素都为真。 | element-wise OR 运算符将这些组合成一个数组。所有元素都必须为真,因此all

您还可以使用unique,它返回已排序的唯一值集。这必须是 [-1,1][1][-1]setdiff 则可以从集合中移除元素-11,如果结果为空,则没有不同于1 或-1 的值:

u = unique(initial_color);
u = setdiff(u,[-1,1]);
result = isempty(u);

注意unique 在这里实际上是多余的,setdiff 也返回唯一集。这样可以更轻松地转换为适合您的 while 的单行:

isempty(setdiff(initial_color,[-1,1]))

setdiff 方法可能比这两个比较更快,但我没有对此进行测试。

【讨论】:

    【解决方案2】:

    你可以使用像abs这样的函数:

    while (all(abs(initial_color(:))==1))
    

    ismember / ismembertol

    【讨论】:

    猜你喜欢
    • 2021-03-09
    • 2012-05-04
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2022-01-14
    • 2018-06-08
    相关资源
    最近更新 更多