0

我有一个非常简单的例子,我试图通过匹配一个字符串来过滤:

A = [0:1:999];
B = A(int2str(A) == '999');

这个

A(A > 990);

作品

这个

int2str(5) == '5'

也有效

我只是想不通为什么我不能把两者放在一起。我收到关于不一致参数的错误。

4

3 回答 3

1

int2str(A)生成一个非常长的char数组(大小1 x 4996),其中包含首尾相连的所有数字(包括间距)的字符串表示形式。

int2str(A) == '999'

因此,在上面的语句中,您试图将一个 size 矩阵1 x 4996与另一个 size矩阵进行比较1 x 3。当然,这会失败,因为两者要么需要具有相同的大小,要么至少需要一个标量,在这种情况下,标量扩展规则适用。

A(A > 990);

由于逻辑索引规则,上述工作有效,结果将是该A条件成立的索引中的元素。

int2str(5) == '5'

这只有效,因为int2str调用的结果是一个1 x 1矩阵 ( '5'),并且您将它与另一个相同大小的矩阵进行比较。尝试int2str(555) == '55'它会失败并出现与上述相同的错误。

我不确定您对原始陈述的期望结果是什么,但也许您正在寻找这个:

A = [0:1:999];
B = int2str(A(A == 999))  % outputs '999'
于 2013-04-27T04:06:08.583 回答
0

我不确定int2str()转换是否是您正在寻找的。(另外,为什么需要将数字转换为字符串,然后进行字符比较?)

假设您有一个更简单的情况:

A    = 1:3;
strA = int2str(A)
strA =
1  2  3

请注意,这是一个 1x7 字符数组。因此,将其与标量字符进行比较:

strA == '2'
ans =
     0     0     0     1     0     0     0

现在,您可能想要转置A并进行比较:

int2str(A')=='2'
ans =
     0
     1
     0

但是,如果每个数字的位数不相同,则此方法将不起作用,因为较小的数字将用空格填充(尝试创建A = 1:10并与 比较'2')。

然后,创建一个没有空格的字符串元胞数组并使用strcmp()

csA = arrayfun(@int2str,A','un',0)
csA = 
    '1'
    '2'
    '3'

strcmp('2',csA)
于 2013-04-27T04:12:11.580 回答
0

与相反的方式相比,将字符串转换为数字应该更快,更正确。尝试

B = A(A == str2double ('999'));
于 2013-04-27T19:31:34.523 回答