2015-06-09 81 views
0

我正在嘗試使用犰狳在C++中查找矩陣中的有限元素的數量。假設一個雙矩陣y,我想我可以(內MEX函數)有限元素的數量

mexPrintf("finite_y: %g\n", (double) accu(find_finite(y))); 

這樣做,但這種返回

[Matlab] finite_y: 1.41381e+09 

不過,我可以得到它一起工作

mat y_ones = mat(y.n_rows, y.n_cols, fill::ones); 
mexPrintf("finite_y (sum-ones): %g\n", accu(y_ones(find_finite(y)))); 

[Matlab] finite_y (sum-ones): 53150 

如何使用accufind_finite來獲取矩陣中有限元素的數量而不創建矩陣的矩陣?

+0

將'accu()'的結果轉換爲'double'看起來可疑。 'find_finite()'的輸出是一個帶有'uword'元素的向量,所以'accu()'的輸出在這種情況下是'uword'。 – mtall

回答

2

find_finite返回類型爲arma::uvec的向量,該向量是arma::Col<uword>的typedef。每個對象Col都有一個屬性.n_elem,它表示矢量的長度。因爲find_finite()返回一個包含有限的X(變元)元素索引的向量,所以可以簡單地將該向量分配給類型爲arma::uvec的變量,或者構造所得向量的副本,並調用其屬性.n_elem告訴我們它擁有的元素的數量。

另外,如果你想使用accu()你可以從find_finite()分配所得載體的uvec讓我們叫它例如arma::uvec newvector;,然後用它的成員函數newvector.ones(),將其所有元素設置爲1,然後用accu(newvector),這與你所做的相似。

聲明:我以前使用過犰狳,可能已經過時了。