np.array を見てみましょう:
array = np.array([[1, 4],
[0, 3],
[2, 3]])
このコードを使用して、値がしきい値より大きい最初の列の最初の要素を見つけます。
index = np.argmax(array[:, 0] > threshold)
しきい値 = 1 を取得すると、期待どおりのインデックスが得られます。
>>index = 2
しかし、2 より大きい値を選択すると、出力は 0 になります。どの要素もしきい値を満たさない場合に備えて、最初の値ではなく最後の値を取得したいため、これは私のプログラムを台無しにします。
その場合、配列の最後の値を取得する効率的な方法はありますか?
編集:
ここでこれがどのように役立つか実際にはわかりません: Numpy: How to find first non-zero value in every column of a numpy array?
むしろ、0 ではなく argmax を返すようなものを探していFalse
ます。
@Divakar と @Achintha Ihalage によるソリューションの比較
import numpy as np
import time
def first_nonzero(arr, axis, invalid_val=-1):
mask = arr != 0
return np.where(mask.any(axis=axis), mask.argmax(axis=axis), invalid_val)
array = np.random.rand(50000, 50000) * 10
test = array[:, 0]
threshold = 11
t1 = time.time()
index1 = np.argmax(array[:, 0] > threshold) if any(array[:, 0] > threshold) else len(array[:, 0])-1
elapsed1 = time.time() - t1
t2 = time.time()
index2 = first_nonzero(array[:, 0] > threshold, axis=0, invalid_val=len(array[:, 0])-1)
elapsed2 = time.time() - t2
print(index1, "time: ", elapsed1)
print(index2, "time: ", elapsed2)
>>49999 time: 0.012960195541381836
>>49999 time: 0.0009734630584716797
したがって、@Divakarのソリューションは超高速です! どうもありがとう!