In [4]:
import numpy as np

# 一维向量
v = np.array([1, 2, 3, 4])
print('v: ', v)

# 二维向量
m = np.array([[1, 2], [3, 4]])
print('m: ', m)

# 显示维度
print('v.shape: ', v.shape)
print('m.shape: ', m.shape)

# 显示大小
print('v.size: ', v.size)
print('m.size: ', m.size)


v:  [1 2 3 4]
m:  [[1 2]
 [3 4]]
v.shape:  (4,)
m.shape:  (2, 2)
v.size:  4
m.size:  4

In [5]:
# 数组生成函数

# 固定步长
x = np.arange(1, 10, 1) # arguments: start, stop, step  
print('x:\n', x)

# 固定长度
y = np.linspace(-10, 10, 25)
print('y:\n', y)

z = np.logspace(0, 10, 10, base=np.e)
print('z:\n', z)


x:
 [1 2 3 4 5 6 7 8 9]
y:
 [-10.          -9.16666667  -8.33333333  -7.5         -6.66666667
  -5.83333333  -5.          -4.16666667  -3.33333333  -2.5         -1.66666667
  -0.83333333   0.           0.83333333   1.66666667   2.5          3.33333333
   4.16666667   5.           5.83333333   6.66666667   7.5          8.33333333
   9.16666667  10.        ]
z:
 [  1.00000000e+00   3.03773178e+00   9.22781435e+00   2.80316249e+01
   8.51525577e+01   2.58670631e+02   7.85771994e+02   2.38696456e+03
   7.25095809e+03   2.20264658e+04]

In [6]:
# 生成随机矩阵

# uniform random numbers in [0,1]
np.random.rand(5, 5)

# standard normal distributed random numbers
np.random.randn(5, 5)


Out[6]:
array([[-1.42126031,  0.71542601, -1.0362404 ,  0.72024787, -1.45840643],
       [ 0.57036316,  0.39713297,  0.06982053,  0.76593411, -0.22036235],
       [ 0.19600705,  0.20570218, -0.35113257, -0.53040221, -1.2207888 ],
       [ 1.28866976,  0.11331538,  0.15447911,  0.59931489, -0.29048144],
       [ 0.27620587, -0.04853096,  1.31493053, -0.31317951,  0.60968806]])

In [7]:
# 对角阵
np.diag([1, 2, 3])

# 次对角阵
np.diag([1, 2, 3, 4], k = 1)

# 零矩阵
np.zeros([3,3])

# 一矩阵
np.ones([3,3])


Out[7]:
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])

In [8]:
# 索引

print(m)
print(m[0, 0])
print(m[:,1])


[[1 2]
 [3 4]]
1
[2 4]

In [9]:
# 切片, 同list

a = np.arange(5)
a[::2] # parameters: start, end, step


Out[9]:
array([0, 2, 4])

In [10]:
A = np.array([[n+m*10 for n in range(5)] for m in range(5)])
print(A)
print(A[1:3, 1:3])


[[ 0  1  2  3  4]
 [10 11 12 13 14]
 [20 21 22 23 24]
 [30 31 32 33 34]
 [40 41 42 43 44]]
[[11 12]
 [21 22]]

In [11]:
x = np.arange(0, 10, 0.5)
x[x>3]
x[(x>3) & (x<5)]
np.where((x>3) & (x<5))


Out[11]:
(array([7, 8, 9]),)

In [18]:
a = np.repeat('abc',3)

a = np.array([[1, 2], [3, 4]])
np.repeat(a, 3)
np.tile(a, 3)


Out[18]:
array([[1, 2, 1, 2, 1, 2],
       [3, 4, 3, 4, 3, 4]])

In [21]:
# 使用矢量化函数

def Theta(x):
    if x>=0:
        return 1
    else:
        return 0

# 矢量化
Theta_vec = np.vectorize(Theta)

Theta_vec(np.array([-1, 0, -1, 1, 3]))


Out[21]:
array(1)

In [23]:
# any 和 all 的用法

M = np.array([[1, 4], [9, 16]])

if (M > 5).any():
    print('At least one element in M is bigger than 5')
else:
    print('no element in M is larger than 5')
    
if (M > 5).all():
    print('All elements in M are bigger than 5')
else:
    print('Not all elements in M is larger than 5')


At least one element in M is bigger than 5
Not all elements in M is larger than 5