0
我可能會用Matlab生鏽一點,也許這個問題的答案比我現在想象的更微不足道。不過,我已經在網上搜索有效的解決方案,我還沒有找到任何,所以我會在這裏嘗試。數組每列中的唯一元素(Matlab)
我有一個大的矩陣,像ÿ這裏:
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)
'diff'和'sort' for'unique' ..聰明!!! –
太糟糕了,不能做這樣的事情。 –
@SanthanSalai'獨一無二'有效地做到了這一點,它只是沒有考慮到這種類型的事情。它't = sort(y)'然後'find(t(1:end-1)〜= t(2:end))',但沒有設置處理像這樣的矩陣。 – David