登录
首页精彩阅读python知识普及:numpy基础操作
python知识普及:numpy基础操作
2020-06-10
收藏

Numpy基础数据结构

import numpy as np
ar = np.array([[1,2,3], [3,4,6], [4,5,7]])  # 二维数组
print(ar)
print(type(ar))
ar
[[1 2 3]
 [3 4 6]
 [4 5 7]]
numpy.ndarray'="">

array([[1, 2, 3],
       [3, 4, 6],
       [4, 5, 7]])
ar = np.array([[1,2,3], [3,4,6], [4,5,7]])
print(ar.ndim)  # 输出数组维度个数(描述这个数组是几维的)
print(ar.shape)  # 输出数组维度形状
print(ar.size)  # 数组元素的总个数
print(ar.dtype)  # 数组的元素类型
2
(3, 3)
9
int32

创建数组

# 方式1 列表创建

ar1 = np.array([0,1,2,3,4,5,6,7,8,9])
print(ar1)
[0 1 2 3 4 5 6 7 8 9]
# 方式2 生成器创建

ar2 = np.array(range(10))
print(ar2)
[0 1 2 3 4 5 6 7 8 9]
# 方式3 arange类似range

ar3 = np.arange(10)  # 返回0-9 整型
print(ar3)
print("")
ar3 = np.arange(10.0)  # 返回0.0-9.0 浮点型 
print(ar3)
print("")
ar3 = np.arange(5, 11)  # 返回5-11之间的整型 不包括11
print(ar3)
print("")
ar3 = np.arange(5,11,2)  # 2代表步长
print(ar3)
[0 1 2 3 4 5 6 7 8 9]

[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

[ 5  6  7  8  9 10]

[5 7 9]
# 方式4 随机创建 范围是 0-1

ar4 = np.random.rand(10)  # 随机生成数值范围是 0-1 并且有10个元素的一维数组
print(ar4)
print(ar4.ndim)  # 维度个数(告诉你这个数组是几维的)
[0.20490144 0.89930216 0.57403933 0.8923752  0.71947406 0.91049224
 0.55663805 0.84965526 0.19433663 0.39087672]
1
# 方式5 均匀间隔创建

# linspace() 返回有num个元素的数组 这num个元素是在10-20上(默认包含结尾)有均匀间隔的元素

ar6 = np.linspace(10, 20, num=20)  # 10 11 12 13 14 15 16 17 18 19 20  
print(ar6)
print("")
ar6 = np.linspace(10, 20, num=21) # 如果想按0.5来均等分的话num就要有21个 可以通过数个数来验证一下
print(ar6)
print("")
ar6 = np.linspace(10, 20, num=21, endpoint=False)  # endpoint=False 表示不包括结尾
print(ar6)
print("")
ar6 = np.linspace(10, 20, num=20, endpoint=False)
print(ar6)
print("")
ar6 = np.linspace(10, 20, num=20, endpoint=False, retstep=True)  # 返回的一个元组并显示步长 retstep=True显示步长
print(ar6)
print("")
print(type(ar6))
print("")
print(ar6[0])  # 取出数组
print(ar6[1])  # 取出数组的步长
[10.         10.52631579 11.05263158 11.57894737 12.10526316 12.63157895
 13.15789474 13.68421053 14.21052632 14.73684211 15.26315789 15.78947368
 16.31578947 16.84210526 17.36842105 17.89473684 18.42105263 18.94736842
 19.47368421 20.        ]

[10.  10.5 11.  11.5 12.  12.5 13.  13.5 14.  14.5 15.  15.5 16.  16.5
 17.  17.5 18.  18.5 19.  19.5 20. ]

[10.         10.47619048 10.95238095 11.42857143 11.9047619  12.38095238
 12.85714286 13.33333333 13.80952381 14.28571429 14.76190476 15.23809524
 15.71428571 16.19047619 16.66666667 17.14285714 17.61904762 18.0952381
 18.57142857 19.04761905 19.52380952]

[10.  10.5 11.  11.5 12.  12.5 13.  13.5 14.  14.5 15.  15.5 16.  16.5
 17.  17.5 18.  18.5 19.  19.5]

(array([10. , 10.5, 11. , 11.5, 12. , 12.5, 13. , 13.5, 14. , 14.5, 15. ,
       15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5]), 0.5)



[10.  10.5 11.  11.5 12.  12.5 13.  13.5 14.  14.5 15.  15.5 16.  16.5
 17.  17.5 18.  18.5 19.  19.5]
0.5
# 创建元素全为0的数组

# zeros(shape, dtype=float, order='C') 默认为浮点型
ar7 = np.zeros(10)
print(ar7)
print(ar7.ndim)
print("")
ar7 = np.zeros((2,5))
print(ar7)
print(ar7.ndim)
print("")
ar7 = np.zeros((2,5), dtype=int)
print(ar7)
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
1

[[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]
2

[[0 0 0 0 0]
 [0 0 0 0 0]]
# zeros_likes表示仿造arr创建一个全为0的数组

ar8 = np.array(range(10))
print(ar8)
[0 1 2 3 4 5 6 7 8 9]
# zeros_likes表示仿造ar8创建一个全为0的数组

ar8 = np.array([list(range(10)), list(range(10,20))])
print(ar8)
print("")
arr = np.zeros_like(ar8)
print(ar8)
[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]]

[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]]
# 创建数值全为1的数组

ar9 = np.ones(10)
print(ar9)
print("")
ar9 = np.ones((2,5))
print(ar9)
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]

[[1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]]
# ones_like表示仿造ar9创建一个数值全为1的数组

ar9 = np.array([list(range(10)), list(range(10,20))])
print(ar9)
print("")
ar9 = np.ones_like(arr)
print(ar9)
[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]]

[[1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1]]
# 创建单位矩阵

ar10 = np.eye(10)
print(ar10)
print("")
print(ar10.ndim)
[[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]]

2

Numpy通用函数

import numpy as np
# reshape 改变数组维度形状

ar1 = np.arange(10)
print(ar1)
print("")
print(ar1.reshape(5, 2))  # 方式1
print("")

ar1 = np.ones((2, 5))
print(ar1)
print("")
ar1 = np.ones((2, 5)).reshape(5, 2)  # 方式2
print(ar1)
print("")

ar1 = np.reshape(np.arange(9), (3,3))  # 方式3
print(ar1)
[0 1 2 3 4 5 6 7 8 9]

[[0 1]
 [2 3]
 [4 5]
 [6 7]
 [8 9]]

[[ 1.  1.  1.  1.  1.]
 [ 1.  1.  1.  1.  1.]]

[[ 1.  1.]
 [ 1.  1.]
 [ 1.  1.]
 [ 1.  1.]
 [ 1.  1.]]

[[0 1 2]
 [3 4 5]
 [6 7 8]]
# T 数组转置

ar2 = np.zeros((2, 5))
print(ar2)
print("")

print(ar2.T) 
[[ 0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.]]

[[ 0.  0.]
 [ 0.  0.]
 [ 0.  0.]
 [ 0.  0.]
 [ 0.  0.]]
# resize跟reshape类似  区别是当改变数组维度时不会因数据量的不同而报错 

ar3 = np.reshape(np.arange(15), (3, 5))
print(ar3)
print("")

ar4 = np.resize(ar3, (5, 3))
print(ar4)
print("")

ar5 = np.resize(ar3, (3, 4))  # 当改变后的数组需要的数据量比原数组的数据量少时 会依次排序 多余的数值不会显示 
print(ar5)
print("")

ar6 = np.resize(ar3, (4, 5))  # 当改变后的数组需要的数据量比原数组的数据量多时 不足的会补充排序
print(ar6)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]

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

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [ 0  1  2  3  4]]
# np.resize(a, shape) 有返回值 不会改变原数组

ar7 = np.arange(10)
print(ar7)
print("")
ar8 = np.resize(ar7, (2, 5))
print(ar8)
print("")
print(ar7)
[0 1 2 3 4 5 6 7 8 9]

[[0 1 2 3 4]
 [5 6 7 8 9]]

[0 1 2 3 4 5 6 7 8 9]
# a.resize(shape)  没有返回值 直接改变原数组

ar7 = np.arange(10)
print(ar7)
print("")

ar8 = ar7.resize(2, 5)  # 注意ar8为None 因为是改变原数组 所以没有返回值
print(ar8)
print("")
print(ar7)
[0 1 2 3 4 5 6 7 8 9]

None

[[0 1 2 3 4]
 [5 6 7 8 9]]
# 数据类型转换  astype

ar9 = np.arange(10, dtype=np.float64)
print(ar9)
print(ar9.dtype)  # 查看数值类型
print("")

ar10 = ar9.astype(np.int64)  # 改变数值类型
print(ar10)
print(ar10.dtype)
[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9.]
float64

[0 1 2 3 4 5 6 7 8 9]
int64
# 数组堆叠

# hstack vstack
a = np.arange(10)
print(a)
print("")
b= np.arange(10, 20)
print(b)
print("")

c = np.hstack((a, b))  # hstack表示横向连接
print(c)
print("")

d = np.vstack((a, b)) # vstack表示纵向连接
print(d)
print("")
[0 1 2 3 4 5 6 7 8 9]

[10 11 12 13 14 15 16 17 18 19]

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]

[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]]

[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]]
# stack

print(a)
print("")
print(b)
print("")

e = np.stack((a, b), axis=0)  # axis=0 横向看(纵向连接)
print(e)
print("")

e = np.stack((a, b), axis=1)  # 纵向看(横向连接)
print(e)
[0 1 2 3 4 5 6 7 8 9]

[10 11 12 13 14 15 16 17 18 19]

[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]]

[[ 0 10]
 [ 1 11]
 [ 2 12]
 [ 3 13]
 [ 4 14]
 [ 5 15]
 [ 6 16]
 [ 7 17]
 [ 8 18]
 [ 9 19]]
# 数组拆分

a = np.arange(16).reshape(4, 4)
print(a)
print("")

b = np.hsplit(a, 2)  # 按列来切割
print(b)

print("")
c = np.vsplit(a, 2)  # 按行来切割
print(c)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]

[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]

[array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])]
# 求和 sum

a = np.arange(10).reshape(2, 5)
print(a)
print("")

print(np.sum(a, axis=0))  # 0代表横轴
print("")
print(np.sum(a, axis=1))  # 1代表纵轴
[[0 1 2 3 4]
 [5 6 7 8 9]]

[ 5  7  9 11 13]

[10 35]
# 排序 sort

print(np.sort(np.array([3, 5, 5, 3, 1, 4])))
[1 3 3 4 5 5]

Numpy基本索引和切片

import numpy as np
# 一维数组

arr = np.array(range(10))
print(arr)
print("")

print(arr[4])
print(arr[:3])
print(arr[::2])
[0 1 2 3 4 5 6 7 8 9]

4
[0 1 2]
[0 2 4 6 8]
# 二维数组

arr = np.arange(20).reshape(4, 5)
print(arr)
print("")

print(arr[2])  # 取出某一行
print("")
print(arr[2][2])  # 取出某一个数
print("")
print(arr[1:3])  # 取出多行
print("")
print(arr[2, 2])  # 逗号前代表行 逗号后代表列
print("")
print(arr[:2, 1:3])  # 取出多行多列
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]

[10 11 12 13 14]

12

[[ 5  6  7  8  9]
 [10 11 12 13 14]]

12

[[1 2]
 [6 7]]
# 三维数组

arr = np.arange(48).reshape(3,4,4)  # 3个4行4列的数组
print(arr)
print("*"*30)

print(arr[2])
print("*"*30)

print(arr[2][1])
print("*"*30)

print(arr[2][1][1])
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]
  [12 13 14 15]]

 [[16 17 18 19]
  [20 21 22 23]
  [24 25 26 27]
  [28 29 30 31]]

 [[32 33 34 35]
  [36 37 38 39]
  [40 41 42 43]
  [44 45 46 47]]]
******************************
[[32 33 34 35]
 [36 37 38 39]
 [40 41 42 43]
 [44 45 46 47]]
******************************
[36 37 38 39]
******************************
37

Numpy布尔型索引及切片

# 用布尔型索引去做筛选

arr = np.arange(12).reshape(3, 4)
print(arr)
print("")

a = np.array([True, False, True])
print(a)
print("")

b = np.array([True, False, False, True])
print(b)
print("")

print(arr[a, :])
print("")

print(arr[:, b])
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

[ True False  True]

[ True False False  True]

[[ 0  1  2  3]
 [ 8  9 10 11]]

[[ 0  3]
 [ 4  7]
 [ 8 11]]
# 用布尔型矩阵去做筛选

print(arr)
print("")

m = arr>5
print(m)
print("")

n = arr[arr>5]
print(n)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

[[False False False False]
 [False False  True  True]
 [ True  True  True  True]]

[ 6  7  8  9 10 11]

Numpy随机数生成

import numpy as np
# random.normal 正态分布随机数
print(np.random.normal(size=(4, 4)))  # 生成一个4行4列的正态分布随机数
[[ 1.01645652 -0.30952914 -0.40576099 -0.94259139]
 [-0.16483869  0.42278586  0.8260384  -0.88469832]
 [ 1.31487466 -0.86188981 -0.71485117 -2.12449215]
 [-1.80353888 -0.93264659 -1.1424078   0.31905742]]
# random.rand 平均分布 随机生成 [0-1) 之间的数 

a = np.random.rand()  # 生成一个数
print(a)
print("")

b = np.random.rand(4)  # 生成4个数 
print(b)
print("")

c = np.random.rand(2,4)  # 生成二维数组 
print(c)
0.11426452609434679

[ 0.79633633  0.32467913  0.28038512  0.56304155]

[[ 0.06561635  0.40454132  0.58158716  0.73527881]
 [ 0.59301023  0.74935326  0.24347665  0.59653582]]
# np.random.randint 在自定义的范围内随机生成整数

a = np.random.randint(3)  # 在 [0-3)的范围内随机生成一个整数
print(a)
print("")

b = np.random.randint(2, 10)  # [2-10)的范围内随机生成一个整数
print(b)
print("")

c = np.random.randint(20, size=10)  # 生成一个 [0-20) 之间 有10个整数元素的一维数组
print(c)
print("")

d = np.random.randint(20, 40, size=10)  # 生成一个 [20-40) 之间 有10个整数元素的一维数组
print(d)
print("")

e = np.random.randint(40, 50, size=(2, 5))  # 生成一个 [40-50) 之间 有2行5列元素的二维数组
print(e)
0

6

[ 9 11  5 12 19  4 19  1  7 10]

[24 20 34 38 37 24 26 35 35 30]

[[49 42 42 44 49]
 [44 44 40 49 45]]

数据分析咨询请扫描二维码

客服在线
立即咨询