forループを使用せずに、2つのndarrayの対応する要素に一度の関数を適用したいとします。たとえば、次の2つのndarray x
とy
と、2つの1次元配列をとり、beta
を計算する関数foo
があるとします。私が欲しい 最終結果はbeta00 = foo(x[0, 0],y[0])
、beta01 = foo(x[0, 1], y[1])
、beta10 = foo(x[1, 0],y[0])
、beta11 = foo(x[1, 1], y[1])
を計算し、私はベクトル化機能に探してきた2つのndarrayの対応する行を一度に(forループなしで)適用する
[[beta00, beta01],
[beta10, beta11]]
の期待される結果をもたらすと機能を適用することで、まだ解決していません。誰かが私にこれを助けることができますか?事前に多くの感謝。
import numpy as np
x = np.array([[[0, 1, 2, 3], [0, 1, 2, 3]],
[[2,3,4,5], [2,3,4,5]]])
y = np.array([[-1, 0.2, 0.9, 2.1], [-1, 0.2, 0.9, 2.1]])
def foo(x,y):
A = np.vstack([x, np.ones(x.shape)]).T
return np.linalg.lstsq(A, y)[0][0]
(x)のところxはタプルとなり、map(foo、zip(x、y))を使用します – Aquiles
共通の2d numpyインデックスを使用すると、コードはより明確になります。 'a [0] 0] '。と 'len(x)'ではなく 'x.shape [0]'となります。言い換えれば、1d、2dなどの配列を持つ場所を明確にしてください。つまり、実際のベクトル化の鍵は多次元配列を受け入れるように 'foo'を書くことです。 – hpaulj