我在Matlab中有(n×n)矩陣。例如(N = 3):matlab - 矩陣中出現的次數
A=[1,2,3; 4,5,6; 1,9,9]
我要計數爲第一n號碼的出現次數(和創建矩陣B)。 輸出:
B=[2,1,1]
謝謝。
我在Matlab中有(n×n)矩陣。例如(N = 3):matlab - 矩陣中出現的次數
A=[1,2,3; 4,5,6; 1,9,9]
我要計數爲第一n號碼的出現次數(和創建矩陣B)。 輸出:
B=[2,1,1]
謝謝。
如果你有統計工具箱,你可以使用tabulate
(doc),否則countmember
(matlab exchange)將做到這一點。
TABLE = tabulate(A(:));
假設人們需要像tabular(A(ismember(A,A(:,1))))'將其限制爲第一行值。 –
這應該做的伎倆:
A=[1,2,3; 4,5,6; 1,9,9];
for i=1:length(A)
B(i) = length(find(A(1,i) ==A));
end
雖然提到矩陣是'nxn',但是使用'length'通常會提出問題。在這種情況下,我會選擇'size(A,2)'來代替'length(A)'。 –
這是正確的。長度(A(:,1))也可以工作,只指定維度2的長度。 – ewz
如果性能是個問題,那麼'length(find)可能可以用sum來代替 –
這可以用ismember
做到:
[lia,lib]=ismember(A,A(1,:))
h=hist(lib(lib>0),1:size(A,2))
這會返回'B = [ 2 1 6]'。 –
@MohsenNosratinia我現在看到,使用直方圖可能不太實際。已將方法改爲「ismember」。 –
這可以用bsxfun
和sum
非常優雅的完成。
sum (bsxfun (@eq, A(1:n), A(:)))
但是,我相信你的例子是不正確的。在您的示例矩陣
A=[1,2,3; 4,5,6; 1,9,9]
的前3個元素是不是[1 2 3]
但[1 4 1]
因爲在Matlab元素在列主順序。如果要檢查第一行中的第一個n
元素,則應該改爲:
sum (bsxfun (@eq, A(1,1:n), A(:)))
如果'A = [1,2; 3,1]'那麼你是'B = [2,1]'還是'B = [1,1]'?即你是在該列還是在整個表中計算? – Dan