2

私は4つの変数の関数を書きたいです:f(x1,x2,x3,x4)それぞれが異なる次元にあります。

これは、によって達成できますf(x1,x2[newaxis],x3[newaxis,newaxis],x4[newaxis,newaxis,newaxis])

よりスマートな方法を知っていますか?

4

2 に答える 2

2

あなたが探している1 :np.ix_

f(*np.ix_(x1, x2, x3, x4))

例えば:

>>> np.ix_([1, 2, 3], [4, 5])
(array([[1],
        [2],
        [3]]), array([[4, 5]]))

1または同等に、np.meshgrid(..., sparse=True, indexing='ij')

于 2016-11-13T11:30:56.180 に答える
1

1 つの方法は、主要な軸に沿って適切な数のシングルトン次元を指定して、各配列を再形成することです。すべての配列でこれを行うには、リスト内包表記を使用できます。

したがって、一般的な数の入力配列を処理する 1 つの方法は次のようになります。

L = [x1,x2,x3,x4]
out = [l.reshape([1]*i + [len(l)]) for i,l in enumerate(L)]

サンプルラン -

In [186]: # Initialize input arrays
     ...: x1 = np.random.randint(0,9,(4))
     ...: x2 = np.random.randint(0,9,(2))
     ...: x3 = np.random.randint(0,9,(5))
     ...: x4 = np.random.randint(0,9,(3))
     ...: 

In [187]: A = x1,x2[None],x3[None,None],x4[None,None,None]

In [188]: L = [x1,x2,x3,x4]
     ...: out = [l.reshape([1]*i + [len(l)]) for i,l in enumerate(L)]
     ...: 

In [189]: A
Out[189]: 
(array([2, 1, 1, 1]),
 array([[8, 2]]),
 array([[[0, 3, 5, 8, 7]]]),
 array([[[[6, 7, 0]]]]))

In [190]: out
Out[190]: 
[array([2, 1, 1, 1]),
 array([[8, 2]]),
 array([[[0, 3, 5, 8, 7]]]),
 array([[[[6, 7, 0]]]])]
于 2016-11-13T08:46:04.467 に答える