• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

wyliczanie centroidow

0 głosów
69 wizyt
pytanie zadane 27 stycznia w C i C++ przez hicodyn Początkujący (360 p.)
edycja 27 stycznia przez hicodyn

Mam vector struktur Punkt

struct punkt
{
	std::vector<double> wspolrzedne;
	int nrKlastra{};
};

każdemu punkt w przestrzeni d-wymiarowej jest przypisany do jednego klastra/ jednej grupy. Chodzi o to, aby wśród każdego klastra wyliczyć centroid dodając do siebie poszczególne współrzędne, a następnie dzieląc przez liczbę punktów. 

Przykład dla dwóch punktów 3- wymiarowych:

A = [2, 3, 5] B= [6, 3, 7]    ====> centroid dla nich to bedzie C[ 4, 3, 6 ]

Za każdym razem jednak wyrzuca mi błąd i nie za bardzo wiem jak to zrobić ani co robię źle, bo program przed kompilacją żadnych błędów nie pokazuje. Tutaj jest kod funkcji

std::vector<punkt> newCentroidy(std::vector<punkt> vectorCentroidow, std::vector<punkt> vectorPunktow, daneWejsciowe przelaczniki)
{
    std::vector<punkt> vectorCentr;
    std::vector<int> lPuntow{};
    std::vector<std::vector<double>> suma{};

    for (int i = 0; i < przelaczniki.k; i++)
    {
        for (int j = 0; j < vectorPunktow.size(); j++)
        {
            for (int k = 0; k < przelaczniki.d; k++)
            {
                if (vectorPunktow[j].nrKlastra == i)    //jezeli nrKlastra j-tego punktu to i
                {
                    lPuntow[i] += 1;
                    suma[i][k] += vectorPunktow[j].wspolrzedne[k];
                }
            }
        }
    }

    return vectorCentr;
}

przelaczniki, to strutura ktora przechowuje m.in informacje o tym ilo wymiarowe sa punkty (przelaczniki.d).

Kod nie jest dokończony, bo już na tym etapie są jakieś błędy

komentarz 27 stycznia przez NewEraOfPeace Gaduła (4,790 p.)
1. Jakie błędy Ci wyrzuca?
2. Masz UB
komentarz 27 stycznia przez hicodyn Początkujący (360 p.)
Z UB nie wiem o co chodzi, a błąd dodałam do pytania
komentarz 27 stycznia przez NewEraOfPeace Gaduła (4,790 p.)
UB to undefined behaviour, czyli w skrócie ani kompilator, ani program, ani nawet wróżbita Maciej nie odpowiadają za to co się może stać. Proba dostępu poza tablicę to UB.

1 odpowiedź

0 głosów
odpowiedź 27 stycznia przez NewEraOfPeace Gaduła (4,790 p.)
Używasz operatora [] na vectorze, jednak Twój vector ma rozmiar 0 (a w zasadzie Twoje vectory). Musisz użyć konstruktora przyjmującego size_t, którym skontruujesz vectory.
komentarz 27 stycznia przez hicodyn Początkujący (360 p.)
a mógłbyś powiedzieć trochę dokładniej w jaki sposób to zrobić?

Podobne pytania

0 głosów
2 odpowiedzi 784 wizyt
pytanie zadane 19 grudnia 2017 w C i C++ przez zpawlo00 Początkujący (310 p.)
+1 głos
1 odpowiedź 73 wizyt
pytanie zadane 13 grudnia 2020 w C i C++ przez dominguezik Nowicjusz (160 p.)
0 głosów
1 odpowiedź 5,267 wizyt
pytanie zadane 21 września 2015 w C i C++ przez veryhotshark Obywatel (1,610 p.)
Porady nie od parady
Forum posiada swój własny serwer Discord, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

85,698 zapytań

134,499 odpowiedzi

298,515 komentarzy

56,625 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...