対角にd
を最初に付けて作成した対角行列適用関数を実装したいと思います。次に、x
で行列 - ベクトル乗算の束を実行します。もちろん、必要なのは要素ごとのベクトルの乗算だけなので、実際の行列を作成したくありません。1次元目の配列(形状(k、1)または(k、))を乗算し、結果が最初の形状になるようにする
ここで、一部のユーザーは、d
の形の(k,)
と、一部の形の(k,1)
を提供する予定です。また、x
は、形状(k,)
および(k,1)
を有することができる。入力(x
)と同じ形をしているという点で、numpy行列の場合は*
のように振る舞います。
したがって質問:のPython/numpyの、得られた配列は、の形状を有するように、2つnp.arrays x
及び(任意の組み合わせ)の形状(k,)
又は(k,1)
のy
を要素単位-乗算する非あやふや方法がありますx
?
私は、[:,None]
で少し実験
x = np.empty((4,1))
y = np.empty(4)
(x * y).shape # (4,4) -- nope
(y * y).shape # (4,) -- yes
(x * y[:,None]).shape # (4, 1) -- yes
(y * y[:,None]).shape # (4,4) -- nope
と私は確かにif len(x.shape)==...:
に私のコードをラップすることができますが、それは非常にニシキヘビ感じることはありません。
提案?
>>> result.shape
(4,)
がx
の形状を維持するために:
>>> result=x.flatten()*y.flatten()
は、1次元配列を返す必要があります:あなたはx
とy
はその後、numpyのの.flatten()
アレイ法を使用して、両方の本質的1D配列であると仮定できる場合
OK、これはクリスタルクリアです、ありがとう!私の[編集](http://stackoverflow.com/a/10268164/577088)を参照してください。 – senderle