4

いくつかの変数に依存する関数がありますy=f(x1,x2,x3,x4)。各変数が単純な数値の場合、結果は単純な数値になります。変数の 1 つが配列の場合、結果も配列にする必要があります。などなど: 2 つの変数が配列の場合、結果を 2 次元配列にする必要があります。等。

例:

def f(x1,x2,x3,x4):
    y=x1*x2/(x3+x4)
    return y

x1=1.0
x2=2.0
x3=3.0
x4=4.0
f(x1,x2,x3,x4)
# should give 2.0/7.0 = 0.2857...

x3=array([1.0,2.0,3.0,4.0,5.0])
f(x1,x2,x3,x4)
# should give a one-dimensional array with shape (5,)

x4=array([10.0,20.0,30.0,40.0,50.0,60.0,70.0])
f(x1,x2,x3,x4)
# should give a two-dimensional array with shape (5,7)

どうやってするの?(私のプログラムを Python 以外の読者にできるだけ明確にするためには?)

4

2 に答える 2

2

これを行う適切な方法は、適切な形状のデータを渡すことです。2 次元の結果が必要な場合は、2 次元配列を渡す必要があります。これは、によって実現できますnp.newaxis

import numpy as np

def f(x1,x2,x3,x4):
    y = x1*x2/(x3+x4)
    return y

x1 = 1.0
x2 = 2.0
x3 = 3.0
x4 = 4.0
print f(x1,x2,x3,x4)

x3 = np.array([1.0,2.0,3.0,4.0,5.0])
print f(x1,x2,x3,x4)

x3 = x3[:, np.newaxis]
x4 = np.array([10.0,20.0,30.0,40.0,50.0,60.0,70.0])
x4 = x4[np.newaxis, :]
print f(x1,x2,x3,x4)

もちろん、あなたの質問が提起される方法は、配列の形状(5, 7)ではなく配列の形状を取得することを期待する理由が少しあいまいです(7, 5)

于 2013-12-20T19:24:44.123 に答える
0

関数を適切に定義するために @when を使用することを検討するかもしれません。

例えば:

# Case for single values
@when(int, int, int, int)
def f(x1,x2,x3,x4):
    y = x1*x2/(x3+x4)
    return y

# Case for 1D arrays
@when(list, list, list, list)
def f(x1,x2,x3,x4):
    y = []
    for i in range(len(x1)):
        y.append(x1[i]*x2[i]/(x3[i]+x4[i]))
    return y
于 2013-12-20T19:28:15.703 に答える