Matlab:独特功能的行为

时间:2013-12-05 10:48:17

标签: matlab

我目前正在将代码从R2012a迁移到R2013b。

我注意到unique函数行为已更改:

R2012a

>> size(unique([]))

ans =

     0     0

R2013b

>> size(unique([]))

ans =

     0     1

对我来说,在删除双重后,0x0矩阵将成为0x1矩阵似乎是违反直觉的,这实际上是唯一函数的作用。有人有理由这样做吗?

2 个答案:

答案 0 :(得分:7)

如果您需要使用旧行为,行为已随R2013a发生变化:

size(unique([],'legacy'))

如果您需要两个版本的代码,我建议编写一些函数,为新版本调用unique(x,'legacy'),为旧版本调用unique(x)

btw:与unionintersectsetdiffsetxorismember

相同的问题

答案 1 :(得分:1)

我不知道这是否是原因,但它确实带来了优势。

现在您会看到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,这可能会令人困惑。