Hướng dẫn get second max value in python numpy - nhận giá trị tối đa thứ hai trong python numpy

Có rất nhiều giải pháp để làm điều này cho một mảng duy nhất, nhưng còn một ma trận, chẳng hạn như:

>>> k
array([[ 35,  48,  63],
       [ 60,  77,  96],
       [ 91, 112, 135]])

Bạn có thể sử dụng k.max(), nhưng tất nhiên điều này chỉ trả về giá trị cao nhất, 135. Nếu tôi muốn cái thứ hai hoặc thứ ba thì sao?

Hướng dẫn get second max value in python numpy - nhận giá trị tối đa thứ hai trong python numpy

serv-inc

34K9 Huy hiệu vàng152 Huy hiệu bạc178 Huy hiệu đồng9 gold badges152 silver badges178 bronze badges

Hỏi ngày 17 tháng 10 năm 2015 lúc 0:21Oct 17, 2015 at 0:21

Thefoxrocksthefoxrocksthefoxrocks

2.2723 Huy hiệu vàng23 Huy hiệu bạc51 Huy hiệu Đồng3 gold badges23 silver badges51 bronze badges

1

Như đã nói,

np.partition(k.flatten(), -2)[-2]
0 phải nhanh hơn (nhiều nhất là thời gian chạy (n)):

np.partition(k.flatten(), -2)[-2]

nên trả lại yếu tố lớn thứ 2. (

np.partition(k.flatten(), -2)[-2]
1 đảm bảo rằng phần tử được đánh số ở vị trí, tất cả các phần tử trước đây đều nhỏ hơn và tất cả phía sau đều lớn hơn).

Đã trả lời ngày 2 tháng 4 năm 2017 lúc 17:19Apr 2, 2017 at 17:19

Hướng dẫn get second max value in python numpy - nhận giá trị tối đa thứ hai trong python numpy

4

Bạn có thể làm phẳng ma trận và sau đó sắp xếp nó:

>>> k = np.array([[ 35,  48,  63],
...        [ 60,  77,  96],
...        [ 91, 112, 135]])
>>> flat=k.flatten()
>>> flat.sort()
>>> flat
array([ 35,  48,  60,  63,  77,  91,  96, 112, 135])
>>> flat[-2]
112
>>> flat[-3]
96

Đã trả lời ngày 17 tháng 10 năm 2015 lúc 0:27Oct 17, 2015 at 0:27

Hướng dẫn get second max value in python numpy - nhận giá trị tối đa thứ hai trong python numpy

ROFLSROFLSrofls

4.8453 Huy hiệu vàng26 Huy hiệu bạc37 Huy hiệu đồng3 gold badges26 silver badges37 bronze badges

4

Sử dụng chức năng 'duy nhất' là một cách rất sạch sẽ để làm điều đó, nhưng có khả năng không phải là nhanh nhất:

k = array([[ 35,  48,  63],
           [ 60,  77,  96],
           [ 91, 112, 135]])
i = numpy.unique(k)[-2]

Đối với lớn thứ hai

Đã trả lời ngày 24 tháng 5 năm 2019 lúc 19:15May 24, 2019 at 19:15

Alberto Aalberto aAlberto A

1.2423 huy hiệu vàng16 Huy hiệu bạc34 Huy hiệu đồng3 gold badges16 silver badges34 bronze badges

import numpy as np
a=np.array([[1,2,3],[4,5,6]])
a=a.reshape((a.shape[0])*(a.shape[1]))  # n is the nth largest taken by us
print(a[np.argsort()[-n]])

Đã trả lời ngày 22 tháng 9 năm 2017 lúc 16:38Sep 22, 2017 at 16:38

2

nums = [[ 35,  48,  63],
        [ 60,  77,  96],
        [ 91, 112, 135]]

highs = [max(lst) for lst in nums]
highs[nth]

Đã trả lời ngày 10 tháng 5 năm 2019 lúc 23:26May 10, 2019 at 23:26

2

Một cách khác để làm điều này khi lặp lại các yếu tố được trình bày trong mảng trong tay. Nếu chúng ta có một cái gì đó giống như

a = np.array([[1,1],[3,4]])

Sau đó, phần tử lớn thứ hai sẽ là 3, không phải 1.

Ngoài ra, người ta có thể sử dụng đoạn trích sau:

second_largest = sorted(list(set(a.flatten().tolist())))[-2]

Đầu tiên, ma trận phẳng, sau đó chỉ để lại các phần tử duy nhất, sau đó quay lại danh sách có thể thay đổi, sắp xếp nó và lấy phần tử thứ hai. Điều này sẽ trả về phần tử lớn thứ hai từ cuối ngay cả khi có các phần tử lặp lại trong mảng.

Đã trả lời ngày 8 tháng 8 năm 2018 lúc 10:28Aug 8, 2018 at 10:28

drsealksdrsealksdrsealks

2.1771 Huy hiệu vàng16 Huy hiệu bạc 30 Huy hiệu Đồng1 gold badge16 silver badges30 bronze badges