Hallo,
ich habe eine ungefähr 10.000 x 100 große Tabelle. Diese Tabelle dient als Rohdatenmatrix für Clusteranalyse. Dabei geht es um Stresse (so wie kälte, dürre, salz usw), die auf einen Organismus wirken können.
Nun soll sie in Distanzmatrix überführt werden und zwar für die 100 Spalten (also Stress x Stress). Somit bekomme ich nun eine 100 x 100 große Tabelle, bei der nur untere Diagonale befüllt ist.
Folgendes habe ich bis jetz gemacht:
In einer neuen Sheet in die erste Zelle habe ich geschrieben: WENN(ZEILE( )<SPALTE( );"---";WENN(ZEILE( )=SPALTE( );0;"toDo")).
Man erkennt alle Werte die über Diagonale liegen werden mit Strichen befüllt. Da wo spalte = zeile sind die 0, da die Stresse gleich sind daher muss keine Distanz berechnet werden.
Da wo toDo steht muss eine Formel hin. Der Wert wird folgendermaßen berechnet: Angenommen für Stress1 und Stress2 werden die Werte der Zeilen aus Rohdatenmatrix paarweise substrahiert (also für alle 10000 Stück) und anschließend quadriert und summiert:
Also: Summe( (Wert1,1-Wert1,2)^2; (Wert2,1-Wert2,2)^2; (Wert3,1-Wert3,2)^2; ...)
Wobei Wert 1,1 steht für erste Zeile erste Spalte; Wert 3,2 für dritte Zeile 2 Spalte.
Man sieht sofort, dass die Formel selbst für eine Zelle bei 10000 Zeilen rieseig wäre es sind aber knapp 5000 solche zu berechnen.
Es muss bestimmt eine Möglichekeit geben, die Zeilen paarweise zu substrahieren. Quadrat ist kein Problem dafür ist QUADRATESUMME da.
Hat jemand eine Idee? Vieln Dank im Voraus
🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Splaten paarweise substrahieren
-
- Beiträge: 2
- Registriert: Mi 7. Mär 2012, 16:11
Re: Splaten paarweise substrahieren
Hallo
Schreibe in A1 in einem neuen Blatt:
Aktiviere diese Formel als Matrixfunktion ( [x]Matrix im Formelassistenten )
Kopiere die jetzt entstandene Matrix mit STRG+c , markiere B1:AX1 und füge mit STRG+v ein.
Ps. ref ist der 100*10000 grosse Daten-Bereich mit dem Namen ref (→Einfügen→Namen...)
Karo
Schreibe in A1 in einem neuen Blatt:
Code: Alles auswählen
=(INDEX(ref;ZEILE(A1:A10000);SPALTE(A1)*2-1)-INDEX(ref;ZEILE(A1:A10000);SPALTE(A1)*2))^2
Kopiere die jetzt entstandene Matrix mit STRG+c , markiere B1:AX1 und füge mit STRG+v ein.
Ps. ref ist der 100*10000 grosse Daten-Bereich mit dem Namen ref (→Einfügen→Namen...)
Karo
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
-
- Beiträge: 2
- Registriert: Mi 7. Mär 2012, 16:11
Re: Splaten paarweise substrahieren
vielen Dank für den Ansatz. Das funktioniert aber leider nicht ganz so wie gewünscht. Auf dem ersten Bild ist die Kurzversion der Matrix
Bild1
Den Bereich kompltett mit Überschriften habe ich smallTest genannt.
Weiterhin auf dem 2.Blatt habe ich in die A1 folgende Formel reingeschrieben
Die Berechnung zumindest für die erste Zelle ist richtig (ja es wird natürlich 0 mit der Formel angezeigt - also das erste Problem, wenn ich meine Bedingungen nicht berücksichtige wird natürlich richtig berechnet)
Angenommen ich bilde die Distanzmatrix und wil die danach in die Tabelle StressxStress (Also 3x3 kopieren) wobei erste Zeile und erste Spalte jeweils die Überschriften sind. Also ich füge die Matrix ab B2 ein (B2 -> D4). Daher funktioniert die Formel schon mal nicht.
Außerdem soll es andersrum berechnet werden: in B2 kommt ja 0 (nach meiner Formel oben auch in C3 und D4). C2, D2 und D3 werden mit Strichen ("---") befüllt.
Die Berechnung nach der Formel für B3 wäre schon richtig (Also B2:B8 minus C2:C8 - also mit Berücksichtigung von Überschriften)
In B4 muss ABER B2:B8 minus D2:D8 kommen anstatt B2:B8 minus D2:D8 (!!!)
Wie kann man die Formel entsprechend korregieren?
Bild1

Den Bereich kompltett mit Überschriften habe ich smallTest genannt.
Weiterhin auf dem 2.Blatt habe ich in die A1 folgende Formel reingeschrieben
Code: Alles auswählen
WENN(ZEILE()<SPALTE();"---";WENN(ZEILE()=SPALTE();0;QUADRATESUMME(INDEX(smallTest;ZEILE(A$2:A$8);SPALTE(A1)*2-1)-INDEX(smallTest;ZEILE(A$2:A$8);SPALTE(A1)*2))))
Angenommen ich bilde die Distanzmatrix und wil die danach in die Tabelle StressxStress (Also 3x3 kopieren) wobei erste Zeile und erste Spalte jeweils die Überschriften sind. Also ich füge die Matrix ab B2 ein (B2 -> D4). Daher funktioniert die Formel schon mal nicht.
Außerdem soll es andersrum berechnet werden: in B2 kommt ja 0 (nach meiner Formel oben auch in C3 und D4). C2, D2 und D3 werden mit Strichen ("---") befüllt.
Die Berechnung nach der Formel für B3 wäre schon richtig (Also B2:B8 minus C2:C8 - also mit Berücksichtigung von Überschriften)
In B4 muss ABER B2:B8 minus D2:D8 kommen anstatt B2:B8 minus D2:D8 (!!!)
Wie kann man die Formel entsprechend korregieren?
Re: Splaten paarweise substrahieren
Hallo
Häng mal ein .ods-Beispielsdokument an, ich hab keine Lust deine Zahlenmatrix mühsam nachzubauen.
Karo
Der Unterschied zwischen dem roten und dem grünen Text ist der zwischen 'rot' und 'grün' !?In B4 muss ABER B2:B8 minus D2:D8 kommen anstatt B2:B8 minus D2:D8 (!!!)
Häng mal ein .ods-Beispielsdokument an, ich hab keine Lust deine Zahlenmatrix mühsam nachzubauen.
Karo
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.