我想從數組x
中取兩個最小值。但是當我使用np.where
:如何從numpy數組中獲取兩個最小值
A,B = np.where(x == x.min())[0:1]
我得到這個錯誤:
ValueError: need more than 1 value to unpack
我怎樣才能解決這個問題?我需要在數組中以升序排列一個數字嗎?
我想從數組x
中取兩個最小值。但是當我使用np.where
:如何從numpy數組中獲取兩個最小值
A,B = np.where(x == x.min())[0:1]
我得到這個錯誤:
ValueError: need more than 1 value to unpack
我怎樣才能解決這個問題?我需要在數組中以升序排列一個數字嗎?
您可以使用numpy.partition
獲得最低k+1
項目:
A, B = np.partition(x, 1)[0:2] # k=1, so the first two are the smallest items
在Python 3.x中,你也可以使用:
例如:
import numpy as np
x = np.array([5, 3, 1, 2, 6])
A, B = np.partition(x, 1)[0:2]
print(A) # 1
print(B) # 2
如何使用sorted
而不是np.where
?
A,B = sorted(x)[:2]
似乎每個人都在閱讀這個問題,包括我自己和@MSeifert。 1)分區比分類更有效率。 2)OP正在尋找多次出現相同的值。 –
代碼中有兩個錯誤。第一個是切片是[0:1]
,應該是[0:2]
。第二個實際上是np.where
的一個非常常見的問題。如果您查看the documentation,您會看到它總是返回一個元組,如果只傳遞一個參數,則返回一個元素。因此,你必須先索引陣列正常訪問元組元素:
A,B = np.where(x == x.min())[0][0:2]
這將給你包含最小值的兩個第一索引。如果沒有兩個這樣的指數存在,你會得到一個例外,所以你可能想檢查。
好, '[0:1]'分割語法等於'[:1]'語法,這意味着從該數組中獲取第一個元素。你爲什麼不做'A,B = [np.where(x == x.min())] * 2'(解包列表)?你真的不需要切片語法,因爲在給定的序列中只有*一個*最小值。 – blacksite
你想要數組中最小值或最小兩個值的**索引**嗎?你可以包括一個最小的樣本,並展示結果應該是什麼樣子? – MSeifert
@MSeifert我想要數組中的兩個最小值。 – qasim