配列を軸に沿って別の配列の要素で分割するnumpy関数はありますか?たとえば、配列の形状(l、m、n)と配列bの形状(m、)があるとします。私はと同等の何かを探しています:たとえばnumpy軸に沿って分割する
def divide_along_axis(a,b,axis=None):
if axis is None:
return a/b
c = a.copy()
for i, x in enumerate(c.swapaxes(0,axis)):
x /= b[i]
return c
ベクトルの配列を正規化するとき、これは便利です:
>>> a = np.random.randn(4,3)
array([[ 1.03116167, -0.60862215, -0.29191449],
[-1.27040355, 1.9943905 , 1.13515384],
[-0.47916874, 0.05495749, -0.58450632],
[ 2.08792161, -1.35591814, -0.9900364 ]])
>>> np.apply_along_axis(np.linalg.norm,1,a)
array([ 1.23244853, 2.62299312, 0.75780647, 2.67919815])
>>> c = divide_along_axis(a,np.apply_along_axis(np.linalg.norm,1,a),0)
>>> np.apply_along_axis(np.linalg.norm,1,c)
array([ 1., 1., 1., 1.])
いいえ、あなたはありません。その方法は、例として与えられた2次元配列では失敗します。私があなたに与えた例は、c = a/np.apply_along_axis(np.linalg.norm、1、a)[:, np.newaxis]を行うことができますが、関数のようなもっと一般的なものを探していますdivide_along_axis()私は質問で定義します。 – user545424
転置についてはどうなりますか(編集された回答を参照)?あるいは、最初に転置、分割、転置して 'divide_along_axis'を定義することもできます。 – Owen
新しい軸を1次元配列に追加するだけです。 – tillsten