3

私はでこぼこの線形代数を学んでおり、簡単な計算を実行したい: 私は持っている:

m = np.array([[1,2],
              [3,4],
              [5,6]]
v = np.array([10,20,30])

計算/出力したいもの:

[ [1/10, 2/10], 
  [3/20, 4/20],
  [5/30, 6/30]]

基本的に、m の各行と v の各要素の間で要素ごとの除算を実行する

おそらくいくつかのforループを介してそれを行うことができますが、それを行う「適切な」方法を知りたいです。

放送と何か関係があるような気もしますが、それだけです。

ありがとう。

4

1 に答える 1

2

vの要素を の最初の軸に揃える必要がありますm。これを行う 1 つの方法はv、2D 配列に拡張し、np.newaxis/None要素broadcastingごとの除算を実行するときに機能することです。また、両方の入力が整数配列であり、除算を実行しているため、要素ごとの除算を実行する前に、そのうちの 1 つを float に変換する必要があります。したがって、最終的な実装は次のようになります-

m/v[:,None].astype(float)

内部で浮動小数点変換を処理するNumPy の真の除算関数を使用すると、ユーザー レベルでの浮動小数点配列への変換を回避できます。したがって、それを使用した実装は次のようになります-np.true_divide

np.true_divide(m,v[:,None])

サンプルラン -

In [203]: m
Out[203]: 
array([[1, 2],
       [3, 4],
       [5, 6]])

In [204]: v
Out[204]: array([10, 20, 30])

In [205]: m/v[:,None].astype(float)
Out[205]: 
array([[ 0.1       ,  0.2       ],
       [ 0.15      ,  0.2       ],
       [ 0.16666667,  0.2       ]])

In [206]: np.true_divide(m,v[:,None])
Out[206]: 
array([[ 0.1       ,  0.2       ],
       [ 0.15      ,  0.2       ],
       [ 0.16666667,  0.2       ]])
于 2015-11-26T21:45:25.890 に答える