14

私には定義があります

def myfunc(a, b):
    if a < (b*10):
        result = a*2
    else:
        result = a*(-1)
    return result

これは、forループを使用して値を1つずつフィードすると明らかに完全に機能abますが、これには永遠に時間がかかり(定義を少し簡略化しました)、経験から、値を配列として渡すと速度が上がることがわかっています。上。

では、配列を受け入れるようにこのコードを変更するにはどうすればよいですか。私はany()andall()コマンドを使用しましたが、関数が値の配列ではなく1つの値しか出力しないため、これらを間違って使用している必要があります。

私の希望する出力の例は次のとおりです。

>>>a = np.array([1,5,50,500])
>>>b = 1
>>>print myfunc(a, b)
array([-1, -5, 100, 1000])
4

3 に答える 3

16

np.whereを使用できます:

def myfunc(a, b):
    return np.where(a < b*10, a*2, -a)    

例えば、

In [48]: a = np.array([1, 5, 50, 500])

In [49]: b = 1

In [50]: myfunc(a, b)
Out[50]: array([   2,   10,  -50, -500])

出力は目的の出力と同じではありませんが、投稿したコードと一致していることに注意してください。もちろん、不等式を逆にすることで、目的の出力を得ることができます。

def myfunc(a, b):
    return np.where(a > b*10, a*2, -a)

それから

In [52]: myfunc(a, b)
Out[52]: array([  -1,   -5,  100, 1000])
于 2012-11-08T14:14:12.200 に答える
0

関数は完全に削除できるほど単純です。

arr = [1, 5, 50, 500]
arr = [a * 2 if a < b * 10 else -a for a in arr]
于 2012-11-08T14:11:29.943 に答える
0

リスト内包表記を使用します。

myarray = [1, 5, 50, 500]
b = 1
[myfunc(a, b) for a in myarray]
于 2012-11-08T14:09:00.287 に答える