我有一個NumPy ndarray
它是整形(32,1024),並保存32個信號測量,我想合併成一個1024個單元的長陣列,對於每個32都有不同的權重。我使用的是numpy.average
,但我的權重很複雜,average
根據拋出結果的總和來執行權重的歸一化。NumPy ndarray廣播形狀(X,)與(X,1)
看着平均代碼,我意識到我可以通過將權重乘以信號數組然後對第一個軸進行求和來完成同樣的任務。但是,當我嘗試乘以(32,1024)信號數組乘以我的(32)權重數組時,由於(32,)無法廣播到(32,1024),所以我得到一個尺寸不匹配。如果我重塑的權重陣列(32,1),然後一切正常,但是這導致相當醜陋的代碼:
avg = (weights.reshape((32, 1)) * data).sum(axis=0)
任何人都可以解釋爲什麼與NumPy不會讓我的(32)陣列廣播到(32,1024)和/或建議執行加權平均的替代的更簡潔的方式?
numpy可以擴展(32,)到'(1,32)'到'(1024,32)';但你必須授予它將'(32,)'擴展到'(32,1)'的權限。這避免了在其他情況下的含糊性,例如,將(32,)乘以(1024,)。更多關於這個在我最近的答案,http://stackoverflow.com/a/39238203/901925 – hpaulj