我有一个非常简单的例子,我试图通过匹配一个字符串来过滤:
A = [0:1:999];
B = A(int2str(A) == '999');
这个
A(A > 990);
作品
这个
int2str(5) == '5'
也有效
我只是想不通为什么我不能把两者放在一起。我收到关于不一致参数的错误。
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'
我不确定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)
与相反的方式相比,将字符串转换为数字应该更快,更正确。尝试
B = A(A == str2double ('999'));