動作がおかしい原因は、元の配列(array
)の要素のデータ型が 'int64' であるため、
Python
1array[0]=array[0]/array[0].sum()
にて代入をした段階で、データが整数にまるめられるためです。
解決方法としては、最初の段階で
Python
1array = array.astype('float')
として、データ型を少数にしておくと良いかと思います。
が、Broadcastを使ってまとめて計算するのであれば、データ型を変更する必用もなく、以下のように書くことができます。
Python
1import numpy as np
2
3a = np.array([[11,2,7],[10,6,14]])
4
5ret = a / a.sum(axis=1).reshape(-1,1)
6#[[0.55 0.1 0.35 ]
7# [0.33333333 0.2 0.46666667]]
8
9ret = a / a.sum(axis=0)
10#[[0.52380952 0.25 0.33333333]
11# [0.47619048 0.75 0.66666667]]
sklearn.preprocessing.normalize()
を使う方法もあります。
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.normalize.html
Python
1import numpy as np
2from sklearn.preprocessing import normalize
3a = np.array([[11,2,7],[10,6,14]])
4
5ret = normalize(a, axis=1, norm='l1')
6#[[0.55 0.1 0.35 ]
7# [0.33333333 0.2 0.46666667]]
8
9ret = normalize(a, axis=0, norm='l1')
10#[[0.52380952 0.25 0.33333333]
11# [0.47619048 0.75 0.66666667]]
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/06 03:53