/ / python max listy tablic - python, tablice, lista, max

python max lista tablic - python, tablice, lista, max

Mam listę tablic, takich jak:

a = [array([6,2]),array([8,3]),array([4,2])]

próbowałem max(a) który zwraca następujący błąd:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Chcę, aby zwrócił listę lub tablicę, taką jak:

In: max(a)
Out: [8,3]

Nie chcę konwertować wewnętrznych tablic do listy, ponieważ rozmiar listy jest bardzo duży, a także celowo stworzyłem tak, aby wykonywać operacje tablicowe.

Odpowiedzi:

3 dla odpowiedzi № 1

Najprostszym sposobem jest konwersja na krotkę / listy w celu porównania (lub samodzielne wdrożenie porównania):

>>> max(a, key=tuple)
array([8, 3])

Zauważ, że jest to wbudowany max i nie np.max

EDYTOWAĆ:

W przypadku tablic wielowymiarowych użyj .tolist metoda:

max(a, key=operator.methodcaller("tolist"))

2 dla odpowiedzi nr 2

Definiowanie wartości max na tablicach jest, jak mówi wyjątek, niejednoznaczne. Jeśli mamy następujące tablice: [6, 2], [5, 1], więc myślę, że wyjście powinno być [6, 2], ale jeśli mamy następujący przykład: [6, 2], [7, 1] co wtedy musiałoby być wyjście.

W rzeczywistości istnieje tak wiele różnych definicjimax tutaj. Jeśli weźmiemy tablice za wektory, to max może być ich wielkością lub wektorem o maksymalnej współrzędnej x itd. Max może równie dobrze porównać długość tablic na liście i zwrócić tę z większą liczbą elementów w przypadku krawata pierwsza z tych o tej samej długości.

Moją sugestią jest stworzenie klasy abstrakcyjnej dla struktur tablicowych i zdefiniowanie tam maksymalnej operacji z dokładnie takim wynikiem, jakiego oczekujesz.


0 dla odpowiedzi № 3
     python 3.2

a=[([6,2]),([8,3]),([4,2])]
max(a)

Its working well

0 dla odpowiedzi nr 4

Aby mieć tablicę max wraz z idx, używam teraz:

a = [array([6,2]),array([8,3]),array([4,2])]

In: max_a = map(max, a)
Out: max_a = [6,8,4]

In: idx = max_a.index(max(max_a))
Out: idx = 1

In: result = a[idx]
Out: reusult = [8,3]