Matrizenrechnung

OpaK

Mitglied
Du musst dir dazu nur eine Hilfsmethode schreiben, zum Beispiel, um eine nxm-Matrix mit einer mxn-Matrix zu multiplizieren:

Java:
    private List<List<String>> multiply(List<List<String>> a, List<List<String>> b) {
        List<List<String>> c = new ArrayList<>();
        for (int i = 0; i < a.size(); i++) {
            List<String> l1 = a.get(i);
            List<String> l3 = new ArrayList<>();
            for (int j = 0; j < b.get(i).size(); j++) {
                StringBuilder s = new StringBuilder();
                for (int k = 0; k < l1.size(); k++) {
                    List<String> l2 = b.get(k);
                    s.append("(").append(l1.get(k)).append(")*(").append(l2.get(j)).append(")+");
                }
                s = new StringBuilder(StringUtils.left(s.toString(), s.length() - 1));
                l3.add(s.toString());
            }
            c.add(l3);
        }
        return c;
    }

    private void printMat(String c, List<List<String>> m) {
        System.out.println(c + ":");
        for (List<String> list : m) {
            System.out.print("( ");
            for (String string : list) {
                System.out.print(string + " ");
            }
            System.out.println(")");
        }
    }

    private void printAndSolveMat(String name, List<List<String>> m) {
        System.out.println(name + ":");
        for (List<String> list : m) {
            System.out.print("( ");
            for (String string : list) {
                System.out.print(string + " ");
            }
            System.out.println(")");
        }
        System.out.println(name + ":");
        for (List<String> list : m) {
            System.out.print("( ");
            for (String string : list) {
                Node o = Compiler.compile(string);
                System.out.print(o.simplify().beautify() + " ");
            }
            System.out.println(")");
        }
        System.out.println(name + ":");
        for (List<String> list : m) {
            System.out.print("( ");
            for (String string : list) {
                Node o = Compiler.compile(string);
                System.out.print(o.simplify().beautify().val() + " ");
            }
            System.out.println(")");
        }
    }

"Compiler.compile(string).simplify().beautify().val()" ist die Magie.
 

OpaK

Mitglied
Stimmt, das Was? ist ganz einfach, aber das Wie? und Warum? schon heftiger bei ANNs...

(Leider) ist das Thema AI sehr mit Python besetzt... Java wurde dabei kaum in Erwägung gezogen
 

stev.glasow

Mitglied
Ich lasse das wohl lieber mit dem Python-Code in Java umsetzen und fange nochmal von vorne an. Könnt ihr mir ein deutsches -Neuronale Netze Programmieren in Java - Buch empfehlen?
 

OpaK

Mitglied
Hm. Gemini meint ND4J und Tensorflow Java sind nicht kompatibel .
Wie ich schon sagte, die Vorschläge taugen nix.

Allerdings hatte ich jas vorgeschlagen, bevor ich wusste dass es nicht um allgemeine Mathematik geht, sondern um ANN s...

Für ANNs kann Java verwendet werden, aber das ist dann nicht so schnell, vermutlich - auch wenn ND4J die zugrunde liegende Hardware abstrahiert und native C++-Bibliotheken nutzt.

Ich würde klein anfangen. Vielleicht ein 50x50 Netz entwerfen, das nur einen Buchstaben klassifizieren kann. Dann geht's weiter.
 

JCODA

Top Contributor
Tut mir leid, wenn ich der Spielverderber bin, aber: Java und maschinelles Lernen sind einfach nicht kompatibel. Das winzige Stückchen Python-Wissen, welches man braucht um produktiv zu sein, ist so wenig im Vergleich dazu wie viel man über NN/ML insgesamt lernen kann. In Java
Du musst dir dazu nur eine Hilfsmethode schreiben, zum Beispiel, um eine nxm-Matrix mit einer mxn-Matrix zu multiplizieren:

Java:
    private List<List<String>> multiply(List<List<String>> a, List<List<String>> b) {
        List<List<String>> c = new ArrayList<>();
       
    }
Das ist nicht dein Ernst? Solch ein Code sollte nicht existieren, nicht einmal wenn es drum geht, wie man das theoretisch machen könnte...

Es geht um Performance. Ständiges String-Parsen und toString-Gedöns macht alles um mehrere Größenordnungen langsamer. Außerdem möchte man natürlich optimierten SIMD-Code für solche Operationen nutzen.
 

stev.glasow

Mitglied
Das Ding ist das ich keine Lust habe ein Teil in Python (die KI) und den Rest(z.B. die GUI) in Java zu schreiben. Auf ne Python-tkinter-gui z.B. habe ich kein Bock. Ich möchte das ganze Projekt in Java umsetzen. Wo liegt den das Problem bei ANNs in Zusammenhang mit Java?
 

stev.glasow

Mitglied
Jo. Hab mich etwas informiert und Tensorflow Java sieht gut aus - das ist ein Tensorflow wrapper und man kommt komplett ohne Python aus - schreibt alles in Java. Es enthält die ndarray-Bibliothek die als Äquivalent zu numpy gilt - was ja mein ursprüngliches Problem war.
 

stev.glasow

Mitglied
Tensorflow Python und Tensorflow Java sollen übrigens gleich schnell sein - es sind beides Wrapper für das in c++ geschriebene Tensorflow. Aber Java schlägt meiner Meinung nach Python in Performance, GUI- und Serverprogrammierung.
 

OpaK

Mitglied
Ich glaube, die wichtigen Fragen wären, soll es erst einmal einfach "nur" funktionieren oder soll es gleichzeitig auch schnell sein. Ich würde eine stufenartige Herangehensweise wählen, aber ich kenne deinen Kenntnisstand nicht.

Bei mir ists so, dass ich lieber schnell kleine Erfolge sehen will, anstatt die Architektur aufzublähen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Klonen von Arrays/ Matrizenrechnung Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben