import numpy as np
## np.array or np.matrix
A = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
B = np.array([1, 2, 3, 4, 5, 6])
print(A)
print(type(A))
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]
# <class 'numpy.ndarray'>
print(B)
print(type(B))
# [1 2 3 4 5 6]
# <class 'numpy.ndarray'>
print(B.reshape((2, 3)))
print(type(B))
# [[1 2 3]
#  [4 5 6]]
# <class 'numpy.ndarray'>
C = np.mat([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
print(C)
print(type(C))
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]
# <class 'numpy.matrix'>
NumPy for Matlab users — NumPy v1.14 Manual
https://docs.scipy.org/doc/numpy-1.14.0/user/numpy-for-matlab-users.html
# 加 減
A = np.array([
    [2, 12, 9],
    [12, 5, 8],
    [5, 9, 17],
])
B = np.array([
    [21, 17, 2],
    [10, 32, 14],
    [34, 4, 8],
])
print(A + B)
# [[23 29 11]
#  [22 37 22]
#  [39 13 25]]
print(A - B)
# [[-19  -5   7]
#  [  2 -27  -6]
#  [-29   5   9]]
print(np.array_equal(A + B, B + A)) # True
print(np.array_equal(A - B, B - A)) # False
# 乘法
#1 
np1 = np.array([
    [1, 2],
    [3, 4]
])
np2 = np.array([
    [2, 2],
    [1, 1]
])
print(np1.dot(np2))
# [[ 4  4]
#  [10 10]]
#2
np1 = np.array([
    [3],
    [2],
    [1]
])
np2 = np.array([
    [3, 3, 3]
])
print(np1.dot(np2))
# [[9 9 9]
#  [6 6 6]
#  [3 3 3]]
#3
np1 = np.array([
    [5],
    [8],
    [9],
    [10]
])
np2 = np.array([
    [7, 6],
    [4, 6],
    [3, 5]
])
print(np1.dot(np2))
# ValueError: shapes (4,1) and (3,2) not aligned: 1 (dim 1) != 3 (dim 0)
#4
np1 = np.array([
    [8, 4, 2],
    [1, 1, 3]
])
np2 = np.array([
    [1],
    [2],
    [1]
])
print(np1.dot(np2))
# [[18]
#  [ 6]]