我在MATLAB中创建了一个矩阵,但需要检查是否有任何两个连续数字(按行)= 0,如果没有显示答案则输出是或否。我把我的代码放在我的最后一个循环下面是返回错误,我不太确定如何去做。
TypeError: Cannot assign to read only property 'border' of object '#<Object>'
答案 0 :(得分:4)
最后一个循环的代码有很多错误:
x
设置为1并将其用作A
的索引,但绝不会将其从1更改。=
(equality operator)时,您正在使用==
(用于作业)。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 vector,any
用于检查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
的条目。因此,我们检查这些条目的数量是否为正。