データマイニングツールnumpy(六)Numpy配列間演算


一、配列と数の計算
#          ,                。
#   numpy        ,                。
import numpy as np

temp = np.array([[1,2,3,4],[3,4,5,6],[7,8,9,0]],dtype='i4')
temp1 = temp + 3
temp2 = temp * 3

print(temp,temp.shape,temp.ndim)
print(temp1,temp1.shape,temp1.ndim)
print(temp2,temp2.shape,temp2.ndim)

# -------------output---------------------
[[1 2 3 4]
 [3 4 5 6]
 [7 8 9 0]] (3, 4) 2
[[ 4  5  6  7]
 [ 6  7  8  9]
 [10 11 12  3]] (3, 4) 2
[[ 3  6  9 12]
 [ 9 12 15 18]
 [21 24 27  0]] (3, 4) 2

二、配列と配列を計算する(ブロードキャストメカニズム)
1は、配列と配列が同じ次元を持つ場合にのみ計算できます.
ブロードキャストの原則は、2つの配列の後縁次元(末尾から計算される次元)の軸長が一致するか、どちらか一方の長さが1である場合、ブロードキャスト互換性があるとみなされ、ブロードキャストは欠落および(または)長さが1の次元で行われる.
2,両配列のshape(形状)が同じである場合,直接対応ビットに対して加減乗除の計算を行うことができる.
import numpy as np
temp = np.array([[1,2,3,4],[3,4,5,6],[7,8,9,0]],dtype='i4')
temp1 = temp
temp2 = temp / temp1
print(temp2,temp2.shape,temp2.ndim)

RuntimeWarning: invalid value encountered in true_divide
[[ 1.  1.  1.  1.]
  temp2 = temp / temp1
 [ 1.  1.  1.  1.]
 [ 1.  1.  1. nan]] (3, 4) 2

3、配列と配列が同じ次元の数字を持つ場合の計算
2つの配列は末尾から始まり、数字が一致する(数字が等しい、または1)場合は計算できます.
import numpy as np

temp = np.arange(15)
temp1 = temp.reshape(3,1,5)
temp2 = np.arange(4).reshape(1,4,1)
temp3 = temp1 * temp2
print(temp1)
print(temp2)
print(temp3,temp3.shape,temp3.ndim)


# -------------output---------------------
[[[ 0  1  2  3  4]]

 [[ 5  6  7  8  9]]

 [[10 11 12 13 14]]]
 ------------------------------
[[[0]
  [1]
  [2]
  [3]]]
  ------------------------------
[[[ 0  0  0  0  0]
  [ 0  1  2  3  4]-
  [ 0  2  4  6  8]
  [ 0  3  6  9 12]]

 [[ 0  0  0  0  0]
  [ 5  6  7  8  9]
  [10 12 14 16 18]
  [15 18 21 24 27]]

 [[ 0  0  0  0  0]
  [10 11 12 13 14]
  [20 22 24 26 28]
  [30 33 36 39 42]]] (3, 4, 5) 3

三、マトリックス計算
1,行列とは
マトリクス、matrix、arrayの区別マトリクスは2次元でなければなりませんが、arrayは多次元であってもいいです.
2、特徴
行列計算は2次元でなければなりません.(M行、N列)x(N行、L列)=(M行、L列)
3,numpyをマトリクスインスタンスに変換
import numpy as np

temp= np.arange(1,11,dtype=np.int32).reshape(2,5)
print(type(temp))
temp = np.mat(temp)
print(temp,type(temp))

# -------------output---------------------
<class 'numpy.ndarray'>
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]] <class 'numpy.matrix'>

4,マトリックス計算例
import numpy as np

temp1= np.arange(1,11,dtype=np.int32).reshape(5,2)
temp1 = np.mat(temp1)
print(temp1,type(temp1))

temp2 = np.mat([[1, 2],[3, 4]])
print(temp2,type(temp2))

# total = temp1 * temp2
total = np.dot(temp1,temp2)
print(total)

# -------------output---------------------
[[ 1  2]
 [ 3  4]
 [ 5  6]
 [ 7  8]
 [ 9 10]] <class 'numpy.matrix'>
[[1 2]
 [3 4]] <class 'numpy.matrix'>
[[ 7 10]
 [15 22]
 [23 34]
 [31 46]
 [39 58]]