MATLAB - 检查矩阵以查看两个连续的数字是否= 0

时间:2017-11-08 02:50:03

标签: matlab matrix sum

我在MATLAB中创建了一个矩阵,但需要检查是否有任何两个连续数字(按行)= 0,如果没有显示答案则输出是或否。我把我的代码放在我的最后一个循环下面是返回错误,我不太确定如何去做。

TypeError: Cannot assign to read only property 'border' of object '#<Object>'

4 个答案:

答案 0 :(得分:4)

最后一个循环的代码有很多错误:

  • 您将x设置为1并将其用作A的索引,但绝不会将其从1更改。
  • 作为Amit points out,当您使用=equality operator)时,您正在使用==(用于作业)。
  • 作为Gondrian points out,您正在测试总和是否等于零,但是根据您的描述,您似乎应该测试每个值是否为零。
  • 您的循环迭代25次(i = 1:25),但不清楚原因,因为您的矩阵A的大小为n - by - n

不是使用for循环,而是可以使用indexing来执行此操作。由于您要检查行的连续零,这就是它的样子:

zeroPairs = (A(:, 1:(n-1)) == 0) & (A(:, 2:n) == 0);
consecutive = any(zeroPairs(:));

术语A(:, 1:(n-1))获取每个成对比较中的所有“左”值,术语A(:, 2:n)获取所有“正确”值。这些被比较为0,然后是combined。这会创建n - by - (n-1)矩阵zeroPairs,其中值true表示发生一对连续零的位置。此矩阵为reshaped into a column vectorany用于检查true的值是否存在于任何位置。

答案 1 :(得分:0)

您需要更改if块,如下所示。

  if  (A(x) + A(x+1) == 0);
      consecutive = true;
  end

请注意==而非=。第一个用于比较,第二个用于分配。这将消除您当前获得的错误。您的代码算法中可能存在其他问题,但我没有检查或尝试解决此问题。

答案 2 :(得分:0)

顺便说一句:

  

'如果任何两个连续数字(按行)= 0'

如果我理解你的话,你应该尝试'如果A(x)== 0&amp;&amp; A(x + 1)== 0'; 因为'(A(x)+ A(x + 1)== 0)'对于-5和5都是正确的,因为它等于0.但是-5和5不是两个连续的零。

(或者甚至查看'diff'函数。如果以下两个数字相同,它将返回0)

答案 3 :(得分:0)

显示一个矢量化的,更像Matlab的方法:

v = 0; % sought value
C = 2; % desired number of consecutive values in a row
consecutive = nnz(conv2(double(A==v), ones(1,C))==C)>0;

这会将A的每个条目与值v进行比较,然后将2D卷积应用于C个行向量。任何C水平连续的A条目值v将在卷积结果中生成等于C的条目。因此,我们检查这些条目的数量是否为正。