Q1) Numpy関数はさまざまな形で引数を取ることができます。たとえば、np.sum(V)は以下の2つのうちのいずれかをとり、異なる形の出力を返します。さまざまな形の引数を取ることができる関数を作成する
x1= np.array([1,3]) #(1)
x2= np.array([[[1,2],[3,4]], [[5,6],[7,8]]]) #(2)
以下のように、長さ2の1Dベクトルに2つの値を加え、実数を返します。
def foo(V):
return V[0]+V[1];
ただし、このfoo関数は1つの1Dベクトルしか取ることができず、他の形をとることはできません。引数としてx1をとりますが、x2はとりません。上記の2つの変数(x1とx2)、または最後の次元で2の長さの配列を持つ他のシェイプのいずれかで関数を動作させたい場合は、foo関数をどのように修正する必要がありますか?
---------------------------アップデート--------------- ---------------
私の元の関数は、ハードコードされた負のガウス関数pdfでした。
def nGauss(X, mu, cov):
# multivariate negative gaussian.
# mu is a vector and cov is a covariance matrix.
k = X.shape[0];
dev = X-mu
p1 = np.power(np.power(np.pi * 2, k) , -0.5);
p2 = np.power(np.linalg.det(cov) , -0.5)
p3 = np.exp(-0.5 * np.dot(np.dot(dev.transpose(), np.linalg.inv(cov)), dev));
return -1.0 * p1 * p2 * p3;
これで彼の関数は1つのpdf値しか返せません。例えば、np.array([1,2])のような引数を取ることはできますが、np.array([[[1,2]、[5,6]]、[[7,8 ]、[9,0]]])。ここで私の質問は、どのように私のガウス関数を任意の形状の引数を取ると nGauss(np.array([1,2]), mu, cov)
返す[0.000023]を返すなど、同じ構造を維持する各点のPDF値を返すようでした nGauss(np.array([[[1,2], [5,6]], [[7,8],[9,0]]]), mu, cov)
返す[[0.000023,0000014 ]、[0.000012,0.000042]]。
私はscipy関数 'multivariate_normal.pdf'がこれを行うことができることに気付きました。
Q2) 私はまた、NPの基本的な配列を理解するのに困難を抱えています。
t1=np.array([[1,2,3], [4,5,6]])
t2=np.array([1,2,3])
t3=np.array([[1,2,3], [4,5,6],5])
t1の形状は(2,3)であり、マトリックスパースペクティブの観点から正当であると思われます。 2行3列。しかし、t2の形状は(3)でなければならないと思います(3)。 "3"の後の空白の意味はなんですか?また、t3の形状は(3、)である。この場合、寸法が変化する空きスペースの意味ですか?
事前に、お手数をおかけします。
'x1'の場合と' x2'の場合の、fooの出力の形状をどうしたいですか?私はスカラーを#(1)、(2、2)を#(2)と推測していますか?しかし、あなたはもう一番内側のディメンションを追加していますか?手作業で手動で計算して希望の出力をポストすることができれば役に立ちます。 – Praveen
@Praveen元のガウス関数を更新しました。今では1つのベクトルを引数Xとして取ることができます。したがって、 'np.array([1,2])'をXとすると、その時点でpdfの値が得られます。私は今、ガウス関数を使って任意の形のデータを受け入れ、同じ構造のPDF値を最後の次元を除くXの引数に返すことができるのだろうかと思います。 –