2017-05-21 7 views
1

以下の行列で除算エラーがあります。私は、10 x 10 matrixを、行の合計の10 x 1ベクトルで除算したいと思います。すべての0を返すナンシー行列の除算

[[5731, 3, 20, 8, 12, 54, 46, 8, 39, 2], 
[ 2, 6472, 47, 24, 7, 44, 7, 11, 116, 12], 
[ 55, 36, 5296, 104, 84, 27, 106, 53, 183, 14], 
[ 50, 49, 132, 5312, 2, 253, 36, 58, 142, 97], 
[ 16, 28, 36, 9, 5381, 11, 55, 24, 85, 197], 
[ 62, 45, 30, 181, 77, 4631, 117, 28, 161, 89], 
[ 33, 23, 37, 1, 43, 92, 5642, 4, 42, 1], 
[ 20, 20, 74, 23, 55, 14, 4, 5788, 18, 249], 
[ 52, 155, 74, 143, 14, 170, 50, 30, 5036, 127], 
[ 43, 32, 32, 85, 174, 40, 2, 197, 79, 5265]] 

行のsum_vector

[[5923], 
[6742], 
[5958], 
[6131], 
[5842], 
[5421], 
[5918], 
[6265], 
[5851], 
[5949]] 

はしかし、私は、私はこのpostと、このpostを試してみた部門がmatrix/sum_vector

[[0 0 0 0 0 0 0 0 0 0] 
[0 0 0 0 0 0 0 0 0 0] 
[0 0 0 0 0 0 0 0 0 0] 
[0 0 0 0 0 0 0 0 0 0] 
[0 0 0 0 0 0 0 0 0 0] 
[0 0 0 0 0 0 0 0 0 0] 
[0 0 0 0 0 0 0 0 0 0] 
[0 0 0 0 0 0 0 0 0 0] 
[0 0 0 0 0 0 0 0 0 0] 
[0 0 0 0 0 0 0 0 0 0]] 

を発生すると次の行列を得続けますそれでもすべて0になっています。

私はスカラーで行列を分けることができ、正しく戻ってきます。しかし、それはすべてのゼロを返す私の部門の何かです。

私もnp.divide(matrix, sum_vector.reshape((10,1)))matrix/matrix.sum(axis=1)[:,None]を試しました。

私は行列の次元で何かを見逃しているように感じますが、わかりません。

提案?

+1

は、こののpython-2.xのですか? –

+0

はい。 Python 2.7.12 – Chef1075

+1

Python-2.xでは、 '/'は**整数除算**です。 'matrix.astype(np.float)/ sum_vector'を使って浮動小数点の結果を得ることができます。 –

答えて

2

Python2では、整数を別の整数で除算すると整数結果が得られます。これは最も近い整数値に切り下げられます。 Numpyも同じコンベンションに従います。 sum_vectorのすべての値がmatrixのすべての値よりも大きいため、結果はゼロの配列になります。

代わりに浮動小数点除算を実行するには、入力配列の一方または両方を浮動小数点dtypeにキャストする必要があります。 result = matrix.astype(np.double)/sum_vector

The situation is different in Python3ここで、/はデフォルトで浮動小数点除算を実行し、積分結果を得るには//floor division operator)が使用されます。また__future__からdivisionをインポートすることにより、Python2の新しいスタイルの分割動作を得ることができます。

In [1]: 5/2 
Out[1]: 2 

In [2]: from __future__ import division 

In [3]: 5/2 
Out[3]: 2.5 

In [4]: 5 // 2 # floor division operator 
Out[4]: 2 
2

整数除算は、それに慣れるまでは直感的ではありません。結果は整数のままなので、小数点はありません。 Pythonが処理する方法は、最も近い小さな整数に切り捨てることです。そして、Python 2で整数を/で除算する場合、整数除算が実行されます。

Python 3では動作が変更されているため、両方のオペランドが整数であっても、/演算子は浮動小数点の答えを生成します。代わりに//を使用して、整数除算が実際に必要なものであることを指定する必要があります。

関連する問題