我有一個字串陣列arr,我想在其中搜索元素并獲取元素的索引。Numpy 有一種方法where可以搜索元素并以元組形式回傳索引。
arr = numpy.array(["string1","string2","string3"])
print(numpy.where(arr == "string1")
它列印:
(array([0], dtype=int64),)
但我只想要索引號0。
我試過這個:
i = numpy.where(arr == "string1")
print("idx = {}".format(i[0]))
有輸出:
i = [0]
有什么方法可以在不使用替換或切片方法的情況下獲取索引號?
uj5u.com熱心網友回復:
TL;博士
利用:
try:
i = numpy.where(arr == "string1")[0][0]
except IndexError:
# handle the case where "string1" was not found in arr
或者
indices = list(numpy.where(arr == "string1")[0])
細節
第一次嘗試在 NumPy 陣列中查找元素并不直觀。
讓我們分解操作:
>>> arr = numpy.array(["string1","string2","string3"])
>>> arr == "string1"
array([ True, False, False])
請注意,doingarr == "string1"已經在進行搜索:它回傳一個布爾陣列,其形狀與arr告訴我們條件為真的位置相同。
然后,您使用numpy.wherewhich,當僅與一個引數(條件)一起使用時,回傳其輸入非零的位置。使用布林值,這意味著非假。
>>> numpy.where(numpy.array([ True, False, False]))
(array([0], dtype=int64),)
>>> numpy.where(arr == "string1")
(array([0], dtype=int64),)
我不太清楚這在哪里為您提供了一維輸入的陣列元組,但是當您將此語法與二維輸入一起使用時,它更有意義。
無論如何,您在這里得到的是一個元組,其中包含條件匹配的索引串列。請注意,它必須是一個串列,因為您可能有多個匹配項。
對于您的代碼,您需要numpy.where(arr == "string1")[0][0],因為您知道"string1"發生在串列中,但內部串列也可能包含零個或多個值,具體取決于找到字串的次數。
>>> arr2 = numpy.array(["string1","string2","string3","string1", "string3"])
>>> numpy.where(arr2 == "foo")
(array([], dtype=int64),)
>>> numpy.where(arr2 == "string3")
(array([2, 4], dtype=int64),)
因此,當您想使用這些索引時,您應該簡單地將numpy.where(arr == "string1")[0]其視為一個串列(盡管它實際上是一個一維陣列)并從那里繼續。
現在,僅使用numpy.where(arr == "some string")[0][0]是有風險的,因為IndexError如果在arr. 如果您真的想這樣做,請在 try/except 塊中進行。
如果您需要索引串列作為 Python 串列,您可以這樣做:
indices = list(numpy.where(arr == "string1")[0])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/518291.html
標籤:Python数组麻木的
上一篇:Django-聚合成陣列
