Minimum in Diagonale finden

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
A346
Beiträge: 22
Registriert: Di Okt 20, 2020 11:04 am

Minimum in Diagonale finden

Beitrag von A346 »

Hallo zusammen,

ich möchte Minima in den Diagonalen einer Matrix finden. Vielleicht kann mir jemand helfen.

Folgendes Beispiel:
Diagonalen.PNG
In dieser Matrix möchte ich jeweils in den Diagonalen von links unten nach rechts oben die Stelle des jeweiligen Minimums finden.
Die erste Diagonale besteht aus 6 und 6. Es gibt also keines.
Die zweite Diagonale besteht aus 6,9,9. Das Minimum ist 6. Die Ausgabe sollte lauten:[3,1]

Vielen Dank und viele Grüße
A346
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Minimum in Diagonale finden

Beitrag von EDi »

Die erste Diagonale besteht aus 6 und 6. Es gibt also keines.
Ich würde ja sagen 6 ist das Minimum...

Was hast du denn schon probiert?

Meine Idee:

1. Transponieren

2. diag() für die Diagonale
3. which.min für die Position des Minima

2+3 in einer Schleife von 2:Spalten (das ist auch gleichzeitig die zweite Dimension für das Minima).
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
A346
Beiträge: 22
Registriert: Di Okt 20, 2020 11:04 am

Re: Minimum in Diagonale finden

Beitrag von A346 »

Zu Schritt 1:

Was hilft der Schritt des Transponierens?
Damit vertausche ich lediglich die 6 und die 9.
Mit diag() erreiche ich 9 9 0 0 in beiden Fällen. Aber ich brauche ja 6,6 ; 6,9,9 ; 0,0,0,0 ; 0,0,0 ; 0,0

VG
A346
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Minimum in Diagonale finden

Beitrag von jogo »

Bei mir sieht das so aus:

Code: Alles auswählen

A <- matrix(c(9,6,9,0, 6,9,0,0, 6,0,0,0, 0,0,0,0), 4, byrow = TRUE)
W <- function(i) which.min(A[cbind(i:1, 1:i)])
n <- nrow(A)
cbind(1:n, sapply(1:n, W))
# oder
W2 <- function(i) {
  Ind <- cbind(i:1, 1:i)
  w <- which.min(A[Ind])
  if (A[Ind][w] == max(A[Ind])) return(NA)
  w
}
cbind(1:n, sapply(1:n, W2))
Gruß, Jörg
A346
Beiträge: 22
Registriert: Di Okt 20, 2020 11:04 am

Re: Minimum in Diagonale finden

Beitrag von A346 »

Hallo Jörg,

hammer, das funktioniert!
Danke dir!

VG
A346
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Minimum in Diagonale finden

Beitrag von Athomas »

An der Beantwortung dieser Frage möchte ich mich nicht beteiligen, dafür sind mir die eingeführten Begriffe zu obskur!

Ich möchte aber für Interessierte auf die Funktionen col() und row() verweisen, mit denen man lustige Dinge machen kann.
Z.B. könnte man bei einer quadratischen Matrix b mit

Code: Alles auswählen

b[row(b) + col(b) == dim(b)[1] + 1]
die Haupt"falsch"diagonale extrahieren!
Antworten