1

次のような 2D 配列があります。

r1= np.array([[1,2,3,4],[2,3,4,5],[3,4,5,6]])

行ごとに、デフォルト値より大きい値の最初の発生を見つける必要があります。私はこれを使用しています:

default=2
ans= np.argmax(r1>default,1)

問題は、デフォルトより大きい値がある場合は機能しますが、そのような値が見つからない場合はゼロを返すことです。したがって、2 つのケースではゼロを返します。1) 各行の最初の値がデフォルトよりも大きい 2) 各行の値がデフォルトよりも大きい

#simple case:
In[31]: np.argmax(r1>2,1)
Out[31]: array([2, 1, 0], dtype=int64)

#trouble case- both returning zeros
In[32]: np.argmax(r1>7,1)
Out[32]: array([0, 0, 0], dtype=int64)
In[33]: np.argmax(r1>0.5,1)
Out[33]: array([0, 0, 0], dtype=int64)

私は現在これを使用してこれを解決しています:

In[37]: np.any(r1>7,1) + np.argmax(r1>7,1)-1
Out[37]: array([-1, -1, -1], dtype=int64)
In[38]: np.any(r1>0.5,1) + np.argmax(r1>0.5,1)-1
Out[38]: array([0, 0, 0], dtype=int64)

これを簡素化するための他の提案はありますか?

4

2 に答える 2

0

正直なところ、すでにかなり簡潔に見えます。しかし、ここに私がうまくいくと思う代替案があります:

ans = np.argmax(r1>default,1) - (np.amin(r1<=default,1))

最後の部分は、行内のすべての項目がデフォルト値以下になったときを示すブール値の配列を生成します。

行内の False (つまり、既定値を超える値) はすべて False になります。すべての値がデフォルトを下回っている場合にのみ、True の結果が得られます。

于 2016-11-02T05:50:42.270 に答える