裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

Python 3 で,ベクトル・配列の代入演算

2020年12月20日 | Python

Python 3 において,

import numpy as np
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
a[1, :] += 3
a[1, :] -= 3
a[1, :] *= 3

は問題ないが,

a[1, :] /= 3

はエラーを生じる

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
in
----> 1 a[1, :] /= 3

TypeError: No loop matching the specified signature and casting
was found for ufunc true_divide

ベクトルの場合も同じ。

b = np.array([1, 3, 7])
b += 10
b -= 10
b *= 10

は問題ないが,

b /= 10

はエラーを生じる

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
in
----> 1 b /= 10

TypeError: No loop matching the specified signature and casting
was found for ufunc true_divide

a /= 3 は a = np.true_divide(a, 3) とは違うということが問題の本質。

それはさておき

これを回避するには,np.array()  で dtype=float を指定する

a = np.array([[1,2,3], [4,5,6], [7,8,9]], dtype=float)
a[1, :] /= 3
a
b = np.array([1, 3, 7], dtype=float)
b /= 10
b

または,dtype=float となるように,少なくとも一つの数値を小数点付きで指定する

a = np.array([[1.0,2,3], [4,5,6], [7,8,9]])
a[1, :] /= 3
a

b = np.array([1.0, 3, 7])
b /= 10
b

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村