我有一个非常简单的例子,我试图通过匹配字符串来过滤:
A = [0:1:999];
B = A(int2str(A) == '999');
这个
A(A > 990);
作品
此
int2str(5) == '5'
也有效
我只是想不通为什么我不能把两者放在一起。我收到有关不一致参数的错误。
答案 0 :(得分:1)
int2str(A)
生成一个非常长的char
数组(大小为1 x 4996
),其中包含端对端附加在一起的所有数字(包括间距)的字符串表示。
int2str(A) == '999'
因此,在上面的陈述中,您尝试将大小为1 x 4996
的矩阵与另一个大小为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'
答案 1 :(得分: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)
答案 2 :(得分:0)
应该更快,并且将字符串转换为数字是正确的,而不是相反。尝试
B = A(A == str2double ('999'));