【发布时间】:2015-07-26 20:22:47
【问题描述】:
我可能对 Matlab 有点生疏了,也许这个问题的答案比我现在想象的要琐碎。但是我在网上搜索了有效的解决方案,但没有找到,所以我会在这里尝试。
我有一个很大的矩阵,比如 y:
N = 1e6; k = 20; n = 100;
y = ceil(n * rand(k, N));
对于数组的每一列,我想计算唯一元素的数量。循环很慢:
tic
r = zeros(N, 1);
for ii = 1:N
r(ii) = numel(unique(y(:, ii)));
end
toc
寻找矢量化、更快的版本。
大卫的回答似乎也正确且快速。谢谢!
N = 1e6; k = 20; n = 100;
y = ceil(n * rand(k, N));
tic
r1 = zeros(N, 1);
for ii = 1:N
r1(ii) = numel(unique(y(:, ii)));
end
toc
tic
r2 = sum(diff(sort(y)) ~= 0) + 1;
toc
all(r1' == r2)
【问题讨论】:
标签: arrays matlab unique element vectorization