[問題] 關於陣列mismatch的問題 已回收

看板MATLAB作者 (怪龍-卡西歐魯)時間14年前 (2011/04/17 16:00), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/1
我正在實作Gaussian mixture learning 程式裡面包含了下面這段code (只有寫到E step) randorder = randperm(m); mean = zeros(k,n); for i=1:k mean(i,:)=m_in(randorder(i),:); end %the random chosen k means(μi=centroid(i)) sigma=zeros(k,n,n); for i=1:k sigma(i,:,:)=cov(m_in); end %the covariances pi_k=ones(1,k); pi_k=pi_k./k; garma_z= zeros(m,k); for i=1:m for j=1:k garma_z(i,j) = pi_k(j)*mvnpdf(m_in(i,:),mean(j,:),sigma(j,:,:)); sum_tmp=0; for l=1:k sum_tmp=sum_tmp + pi_k(l)*mvnpdf(m_in(i,:),mean(l,:),sigma(l,:,:)); end garma_z(i,j)=garma_z(i,j)/sum_tmp; end end %Evaluate the responsibilities using the current parameter values 其中m_in是我的輸入值 m是資料量,k是要把資料分成多少類,n是每筆資料的feature數量 但是問題是在使用mvnpdf的那行會出現dimension mismatch的錯誤 最奇怪的地方是 我如果把sigma變成二維陣列並這樣做 sigma=cov(m_in); mvnpdf(m_in(i,:),mean(j,:),sigma) 這樣的話就沒有錯誤了 但是因為我需要計算K個sigma的關係,一定要宣告成三維才行 想請問一下為什麼會這樣呢? sigma(j,:,:)應該也是一個二維陣列不是嗎? 為什麼改成這樣就不能用了呢? 是我的語法有誤,還是處理的時候漏了什麼呢? 先感謝各位的回答 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 70.162.57.56 ※ 編輯: hcl012 來自: 70.162.57.56 (04/17 16:05)

04/17 16:04, , 1F
sigma(j,:,:)不是一個二維陣列squeeze(sigma(j,:,:))才是
04/17 16:04, 1F

04/17 16:04, , 2F
你用size看一下就知道了
04/17 16:04, 2F

04/17 16:11, , 3F
感謝回應,用了squeeze後的確沒有mismatch的問題了
04/17 16:11, 3F
文章代碼(AID): #1DgfuYF9 (MATLAB)