我目前正在将代码从R2012a迁移到R2013b。
我注意到unique
函数的行为已经发生了变化:
R2012a
->R2013b
>> size(unique([]))
ans =
0 0
R2013b
>> size(unique([]))
ans =
0 1
对我来说,0x0矩阵经过去重后变成0x1矩阵似乎是违反直觉的。这本质上就是unique函数所做的。有人能解释一下这个逻辑吗?
我目前正在将代码从R2012a迁移到R2013b。
我注意到unique
函数的行为已经发生了变化:
R2012a
->R2013b
>> size(unique([]))
ans =
0 0
R2013b
>> size(unique([]))
ans =
0 1
对我来说,0x0矩阵经过去重后变成0x1矩阵似乎是违反直觉的。这本质上就是unique函数所做的。有人能解释一下这个逻辑吗?
size(unique([],'legacy'))
如果需要为两个版本编写代码,建议编写一些函数,调用unique(x,'legacy')
进行新版本,调用unique(x)
进行旧版本。union
、intersect
、setdiff
、setxor
和ismember
也面临同样的问题。unique(M)
和unique(M(:))
输出相同,即使M
为空。M = magic(5);
isequal(size(unique(M)), size(unique(M(:))));
M = [];
isequal(size(unique(M)), size(unique(M(:))));
在旧版本的Matlab中,后者会返回false,这可能会令人困惑。