W poprzednim poście column vector with row means -- with std::accumulate? Zapytałem, czy to było możliwe, wykorzystując funkcjonalność STL, aby obliczyć środki rzędem macierzyobliczanie sum kolumn wektora macierzy <Wektor <double>> z iteratorami?
vector< vector<double> > data (rows, vector<double> (columns));
Górny odpowiedź przez @benjaminlindley jest nie tylko to, czego szukałem, to rzecz piękna. Zawsze nadzieję, że myślałem, że będzie tak łatwo obliczyć kolumna oznacza, więc równoważny STL z
vector<double> colmeans(data[0].size());
for (int i=0; i<data.size(); i++)
for (int j=0; j<data[i].size(); j++)
colmeans[j] += data[i][j]/data.size();
gdzie średnia nie jest wyliczana wewnątrz każdej vector<double>
, ale po drugiej stronie tego samego indeksu we wszystkich wektorów:
colmeans[0] == (data[0][0] + data[1][0] + ... data[rows][0])/rows
colmeans[1] == (data[0][1] + data[1][1] + ... data[rows][1])/rows
colmeans[2] == (data[0][2] + data[1][2] + ... data[rows][2])/rows
...
colmeans[columns] == (data[0] [columns] +
data[1] [columns] +
...
data[rows][columns])/rows
Okazuje się, że jest zupełnie inaczej - kumulacja nie chce pracować na wektorach wektorów. Czy w jakiś sposób można użyć akumulacji z operatorem []
? Nie mogę nawet wymyślić pośredniej formy (aby pozbyć się pętli for i
lub for j
), która nie wydaje się odpowiednia.
Coś z operatorem accumulate
i operatorem []
? Lub bind
?
Jeśli uważasz, że Beniamin's anwser jest dobry (co, BTW, jest), powinieneś oznaczyć go jako zaakceptowany. – rodrigo
szczerze mówiąc najtrudniejszą częścią tego będzie potencjalny short-wektor w twoim zewnętrznym wektorze wektorów. Jest to podstawowy problem podczas używania 'wektora>'. Nie ma gwarancji, że każdy wektor wewnętrzny ma ten sam rozmiar (z wyjątkiem oczywiście zakładając go w swoim własnym kodzie, który w pierwszej kolejności zapełnia tę rzecz). Nie stanowi to problemu przy wyszukiwaniu wierszy, ponieważ nie bardzo zależy ci na liczbie kolumn. –
WhozCraig
tak @WhozCraig mówisz, że to problem, gdy znajdujesz kolumnę-znaczy? BTW gwarancja, że wewnętrzne rozmiary wektorów są takie same, jest spełnione, to nie zmienia się po inicjalizacji - "dane" to w zasadzie macierz 'wierszy' x 'kolumn' –