Numpy从入门到入墓

参考文章:https://jizhi.im/blog/post/live-aipy-part8

import pandas as pd
import numpy as np

一、shape(形状)

1、np.shape

arr = np.array([[ 1,  2,  3,  4],
             [12, 13, 14,  5],
             [11, 16, 15,  6],
             [10,  9,  8,  7]])
print('arr.shape: ', arr.shape)
print('type(arr.shape): ', type(arr.shape))	# shape返回元组
print('row_number:', arr.shape[0])			# 数组的行数
print('column_number:', arr.shape[1])		# 数组的列数

# 输出:
============================================================
arr.shape:  (4, 4)
type(arr.shape):  <class 'tuple'>
row_number: 4
column_number: 4
============================================================

2、np.reshape

重塑数组的行数和列数

print('=' * 60)
print(arr.reshape(2,8))
print('=' * 60)
arr.reshape(-1) 
print('=' * 60)
arr.reshape(-1, 1) 
print('=' * 60)

# 输出:
============================================================
[[ 1  2  3  4 12 13 14  5]
 [11 16 15  6 10  9  8  7]]
============================================================
array([ 1,  2,  3,  4, 12, 13, 14,  5, 11, 16, 15,  6, 10,  9,  8,  7])
============================================================
array([[ 1],
       [ 2],
       [ 3],
       [ 4],
       [12],
       [13],
       [14],
       [ 5],
       [11],
       [16],
       [15],
       [ 6],
       [10],
       [ 9],
       [ 8],
       [ 7]])
============================================================

二、基本运算

print('=' * 60)
print(arr - 1)		# 加法同理
print('=' * 60)
print(arr * 2)		# 除法同理
print('=' * 60)
print(arr > 9)		# 逻辑判断
print('=' * 60)
print(arr[arr > 9])	# 布尔取值
print('=' * 60)

# 输出:
============================================================
[[ 0  1  2  3]
 [11 12 13  4]
 [10 15 14  5]
 [ 9  8  7  6]]
============================================================
[[ 2  4  6  8]
 [24 26 28 10]
 [22 32 30 12]
 [20 18 16 14]]
============================================================
[[False False False False]
 [ True  True  True False]
 [ True  True  True False]
 [ True False False False]]
============================================================
[12 13 14 11 16 15 10]
============================================================

三、数据类型

str_lst = [[0, "zero"], [1, "one"], [2, "two"], [3, "three"]]
str_arr = np.array(str_lst)
print('=' * 60)
print(str_arr)
print('=' * 60)
print(str_arr.dtype)	# 数组中出现字符类型,数组的数据类型也会变
print('=' * 60)
print(arr.dtype)
print('=' * 60)

# 输出:
============================================================
[['0' 'zero']
 ['1' 'one']
 ['2' 'two']
 ['3' 'three']]
============================================================
<U11
============================================================
int32
============================================================

四、数组操作

1、.tolist()和.ravel()

arr = np.array([[0, 1, 2],
                [3, 4, 5],
                [6, 7, 8]])
arr_lst1 = arr.tolist()
print('=' * 60)
print(arr_lst1)
print('=' * 60)
arr.ravel()
print('=' * 60)
arr.ravel()[1]=100
print('=' * 60)
arr.flatten()[1]=200	#返回的是copy
print('=' * 60)


# 输出:
============================================================
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
============================================================
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
============================================================
array([[  0, 100,   2],
       [  3,   4,   5],
       [  6,   7,   8]])
============================================================
array([[  0, 100,   2],
       [  3,   4,   5],
       [  6,   7,   8]])
============================================================

2、missing values

arr = np.array([[ 1.,  2.,  3.,  4.],
                [ 3.,  4.,  5.,  6.],
                [ 5.,  6.,  7.,  8.]])
print('=' * 60)
arr[2,2] = np.nan
arr[2,3] = np.inf
print(arr)
print('=' * 60)
missing = np.isnan(arr) | np.isinf(arr)
arr[missing] = 0
print(arr)
print('=' * 60)

# 输出:
============================================================
[[ 1.  2.  3.  4.]
 [ 3.  4.  5.  6.]
 [ 5.  6. nan inf]]
============================================================
[[1. 2. 3. 4.]
 [3. 4. 5. 6.]
 [5. 6. 0. 0.]]
============================================================

五、statistics

arr = np.array([[ 1.,  2.,  3.,  4.],
                [ 3.,  4.,  5.,  6.],
                [ 5.,  6.,  7.,  8.]])
print('=' * 60)
print(arr.mean())				# 平均值
print(arr.max())				# 最大值
print(arr.min())				# 最小值
print(np.amax(arr, axis=0))		# 最大值(列)
print(np.amax(arr, axis=1))		# 最大值(行)
print('=' * 60)

# 输出
============================================================
4.5
8.0
1.0
[5. 6. 7. 8.]
[4. 6. 8.]
============================================================

六、np.copy()

arr2 = np.copy(arr)
print('=' * 60)
print(arr)
print('=' * 60)
print(arr2)
print('=' * 60)
arr3 = arr - arr2
print(arr3)
print('=' * 60)

# 输出:
============================================================
[[1. 2. 3. 4.]
 [3. 4. 5. 6.]
 [5. 6. 7. 8.]]
============================================================
[[1. 2. 3. 4.]
 [3. 4. 5. 6.]
 [5. 6. 7. 8.]]
============================================================
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

七、range()和arange()

range是快速生成数字序列的方法,返回List,而arange返回的数据类型是数组
常见参数:start,end,step(步长)
如range(1,10,1),arange(1,10,1)

lst1 = [x for x in range(10)]
print('=' * 60)
print(lst1)
print(type(lst1))
print(lst1[0])
lst2 = np.arange(10)
print(lst2)
print(type(lst2))
print(lst2[0])
print('=' * 60)

# 输出:
============================================================
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
<class 'list'>
0
[0 1 2 3 4 5 6 7 8 9]
<class 'numpy.ndarray'>
0
============================================================

八、linspace()/logspace()

类似range,快速生成数字序列,但是比range更方便。

print('=' * 60)
print(np.linspace(1, 10, num = 10))	# num是返回个数
print(np.linspace(1, 10, num = 11))
print(np.logspace(1, 10, num = 10))
print('=' * 60)

# 输出:
============================================================
[ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
[ 1.   1.9  2.8  3.7  4.6  5.5  6.4  7.3  8.2  9.1 10. ]
[1.e+01 1.e+02 1.e+03 1.e+04 1.e+05 1.e+06 1.e+07 1.e+08 1.e+09 1.e+10]
============================================================

九、Numpy线性代数

1、向量加减法

u = [1,1,2,3,5,8]
v = [1,1,4,5,1,4]
print('=' * 60)
# without numpy
u_add_v = [ui + vi for ui, vi in zip(u,v)]
print(u_add_v)
u_add_v2 = u + v
print('=' * 60)
print(u_add_v2)
print('=' * 60)
u_arr = np.array(u)
v_arr = np.array(v)
u_add_v3 = u_arr + v_arr
print(u_add_v3)
print('=' * 60)

# 输出:
============================================================
[2, 2, 6, 8, 6, 12]
============================================================
[1, 1, 2, 3, 5, 8, 1, 1, 4, 5, 1, 4]
============================================================
[ 2  2  6  8  6 12]
============================================================

2、向量点乘

print('=' * 60)
# without numpy
u_dot_v = [ui * vi for ui, vi in zip(u,v)]
print(u_dot_v)
print(type(u_dot_v))		# 返回的是List
print('=' * 60)
u_arr = np.array(u)
v_arr = np.array(v)
u_dot_v_np = u_arr * v_arr
print(u_dot_v_np)
print(type(u_dot_v_np))		# 返回的是array
print('=' * 60)

# 输出:
============================================================
[1, 1, 8, 15, 5, 32]
<class 'list'>
============================================================
[ 1  1  8 15  5 32]
<class 'numpy.ndarray'>
============================================================

3、矩阵

print('=' * 60)
A = np.matrix([[3,5,3], 
               [7,7,5], 
               [0,7,6]])
print(A)
print('=' * 60)
I = np.eye(6)				# 对角线为1的矩阵
print(I)
print('=' * 60)
D = np.diag([0,1,2,3,4])	# 对角线为指定List的矩阵
print(D)
print('=' * 60)

# 输出:
============================================================
[[3 5 3]
 [7 7 5]
 [0 7 6]]
============================================================
[[1. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 1.]]
============================================================
[[0 0 0 0 0]
 [0 1 0 0 0]
 [0 0 2 0 0]
 [0 0 0 3 0]
 [0 0 0 0 4]]
============================================================

4、矩阵计算

A = np.matrix([[1,1,4],
               [5,1,4],
               [8,1,0]])
print('=' * 60)
print(A.T)		# 矩阵转置
print('=' * 60)
print(A.I)		# 矩阵求逆

print('=' * 60)

# 输出:
============================================================
[[1 5 8]
 [1 1 1]
 [4 4 0]]
============================================================
[[-0.25    0.25    0.    ]
 [ 2.     -2.      1.    ]
 [-0.1875  0.4375 -0.25  ]]
============================================================

十、Numpy统计概率

1、方差(variance)

x = np.array([56,42,72,36,63,47,55,49,38,42,68,60])
y = np.array([147,125,160,118,149,128,150,145,115,140,152,155])
print('=' * 60)
varx = ((x - x.mean())**2).mean()
vary = ((y - y.mean())**2).mean()
print(varx)
print(vary)
print('=' * 60)

# 输出:
============================================================
129.22222222222223
208.3888888888889
============================================================

2、协方差(covariance)

print('=' * 60)
covxy = ((x - x.mean()) * (y - y.mean())).mean()
print(covxy)
print('=' * 60)

# 输出:
============================================================
147.05555555555557
============================================================
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值