python 数据处理相关模块 -- Numpy

190 阅读6分钟
import numpy as np
from numpy.core.defchararray import array
import pandas as pd
import matplotlib.pyplot as plt


# 一维数组
# 使用 array 函数, 通过 list 创建数组对象
array1 = np.array([1, 2, 3, 4, 6])
# print(array1)  # [1 2 3 4 6]

# 使用 arange 函数,指定取值范围创建数组对象
array2 = np.arange(0, 20, 2)
# print(array2)   # [ 0  2  4  6  8 10 12 14 16 18]

# 使用 linspace 函数,用指定范围均匀间隔的数字创建对象
array3 = np.linspace(-5, 5, 6)
# print(array3)  # [-5. -3. -1.  1.  3.  5.]

# 使用 numpy.random 模块的函数生成随机数创建数组对象
array4 = np.random.rand(5)  # 产生5个(0,1)范围的随机小数
# print(array4)   # [0.22430239 0.13015449 0.40544653 0.82790872 0.2468729 ]

# 产生10个(1,100)范围的随机整数
array5 = np.random.randint(1, 100, 10)
# print(array5)   # [62 96 63 82 42 87 91 25  8 99]

# 产生5个正态分布随机数
array6 = np.random.normal(50, 10, 5)
# print(array6)   # [40.8037731  64.75766994 48.19452687 22.06754962 37.51750168]

# 二维数组
# 使用 array 函数,通过嵌套的 list 创建数组对象
array7 = np.array([[1, 2, 3], [4, 5, 6]])
# print(array7)   # [[1 2 3] [4 5 6]]

# 使用zeros、ones、full函数指定数组的形状创建数组对象
# 使用zero函数
array8 = np.zeros((2, 3))
# print(array8)   # [[0. 0. 0.] [0. 0. 0.]]

# 使用ones函数
array9 = np.ones((2, 3))
# print(array9)   # [[1. 1. 1.] [1. 1. 1.]]

# 使用full函数
array10 = np.full((2, 3), 8)
# print(array10)  # [[8 8 8] [8 8 8]]

# 使用eye函数创建单位矩阵
array11 = np.eye(3)
# print(array11)  # [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]]

# 使用reshape将一维数组变成二维数组
array12 = np.array([1, 2, 3, 4, 5, 6]).reshape(2, 3)
# print(array12)  #  [[1 2 3] [4 5 6]]
# reshape 是ndarray 对象的一个方法,使用reshape 方法时需要确保调形后的数组元素个数与调形前的数组元素个数保持一致

# 通过numpy.random 模块的函数生成随机数创建数组对象
# 产生(0,1)范围的随机小数构成的2行3列的二维数组
array13 = np.random.rand(2, 3)
# print(array13)  # [[0.94937488 0.42251875 0.10298617] [0.85885812 0.00710368 0.06763749]]

# 产生(1,100)范围额随机整数构成的2行3列的二维数组
array14 = np.random.randint(1, 100, (2, 3))
# print(array14)  # [[97 88 45] [10 68 58]]

# 使用随机的方式创建多维数组
array15 = np.random.randint(1, 100, (2, 3, 4))
# print(array15)  # [[[36 12 67 30]  [74 39 56 32]  [94 16 74 55]]     [[22 13 83 91]  [34 92 23 16]  [52 83 25 55]]]

# 将一维二维的数组调形为多维数组
# 一维数组调形为多维数组
array16 = np.arange(1, 25).reshape((2, 3, 4))
# print(array16)
# [[[ 1  2  3  4]
#   [ 5  6  7  8]
#   [ 9 10 11 12]]

#  [[13 14 15 16]
#   [17 18 19 20]
#   [21 22 23 24]]]

# 将二维数组调形为多维数组
array17 = np.random.randint(1, 100, (4, 6)).reshape((2, 3, 4))
# print(array17)
# [[[55 51 24 20]
#   [ 9 49 86 64]
#   [ 9 29 50 25]]

#  [[13 25 21 77]
#   [19 24 12  8]
#   [95 93 39 36]]]

# 读取图片获得对应的三维数组
# array18 = plt.imread("xxx.png")
# 读取了当前路径下名为`xxx.jpg` 的图片文件,计算机系统中的图片通常由若干行若干列的像素点构成,而每个像素点又是由红绿蓝三原色构成的,所以能够用三维数组来表示。读取图片用到了matplotlib库的`imread`函数。

# 数组对象的属性
# szie 属性:数组元素个数
array19 = np.arange(1,100,2)
array20 = np.random.rand(3,4)
# print(array19.size, array20.size)   #  50 12

# shape 属性: 数组元素的形状
# print(array19.shape,array20.shape)  # (50,) (3, 4)

# dtype 属性:数组元素的数据类型
# print(array19.dtype, array20.dtype)     # int64 float64

# ndim 属性:数组的维度
# print(array19.ndim,array20.ndim)    # 1 2

# itemsize 属性: 数组单个元素占用内存空间的字节数
array21 = np.arange(1,100,2,dtype=np.int8)
# print(array19.itemsize,array20.itemsize,array21.itemsize)   # 8 8 1
# 在使用 arange 创建数组对象时,通过dtype参数指定元素的数据类型,np.int8代表有8位符号整数,占用一个字节

# nbytes 属性:数组所哟元素占用内存空间的字节数
# print(array19.nbytes, array20.nbytes, array21.nbytes)   # 400 96 50

# flat 属性:数组(一维化之后)元素的迭代器
from typing import Iterable
# print(isinstance(array20.flat,np.ndarray),isinstance(array20.flat,Iterable))    # False True

# base 属性:数组的基对象(如果数组共享了其他数组的内存空间)
array22 = array19[:]
# print(array22.base is array19, array22.base is array21)     # True False


# 数组的索引和切片
# 索引运算
array23 = np.array([1,2,3,4,5,6,7,8,9])
# print(array23[0],array23[array23.size - 1])     # 1 9
# print(array23[-array23.size],array23[-1])   # 1 9

array24 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# print(array24[2])   # [7 8 9]
# print(array24[0][0], array24[-1][-1])   # 1 9
# print(array24[1][1], array24[1, 1])     # 5 5

# 切片运算
# print(array24[:2,1:])
# [[2 3]
#  [5 6]]

# print(array24[::2, ::2])
# [[1 3]
#  [7 9]]

# 数组对象的方法
# 统计方法
# ndarray 对象的统计方法主要包括:sum,mean,std,var,min,max,argmin,argmax,cumsum
# 分别用于对数组中的元素求和,求平均,求标准差,求方差,找最大,找最小,求累积和等
array25 = np.array([1,2,3,4,5,5,4,3,2,1])
# print(array25.sum())    # 30
# print(array25.mean())   # 3.0  
# print(array25.std())    # 1.4142135623730951
# print(array25.var())    # 2.0
# print(array25.min())    # 1
# print(array25.max())    # 5
# print(array25.argmin()) # 0
# print(array25.argmax()) # 4
# print(array25.cumsum()) # [ 1  3  6 10 15 20 24 27 29 30]

# 其他方法
# all() / any() 方法:判断数组是否所有元素都是True / 判断数组是否有为True的元素
# astype() 方法:拷贝数组,并将数组中的元素转换为指定的类型
# dot() 方法:实现一个数组和另一个数组的点积运算
array31 = np.array([[1, 2, 3], [4, 5, 6]])
array32 = np.array([[1, 2], [3, 4], [5, 6]])
# array31.dot(array32)
# array([[22, 28],
#        [49, 64]])

# dump() 方法:保存数组到文件中,可以通过numpy中的load() 函数从保存的文件中加载数据创建数组
array31.dump('array31-data')
array32 = np.load('array31-data', allow_pickle=True)
# print(array32)

# fill() 方法:向数组中填充指定的元素
# flatten() 方法: 将多维数组扁平化为一维数组
# print(array32.flatten())    # [1 2 3 4 5 6]

# nonzero() 方法:返回非0元素的索引
# round() 方法:对数组中的元素做四舍五入操作
# sort() 方法: 对数组进行就地排序
array33 = np.array([35,95,3,554,12,332])
array33.sort()
# print(array33)  # [  3  12  35  95 332 554] 

# swapaxes() 和 transpose() 方法: 交换数组指定的轴
# 指定需要交换的两个轴,顺序无所谓
# print(array32.swapaxes(0,1))    
# [[1 4]
#  [2 5]
#  [3 6]]

# 对于二维数组,transpose 相当于实现了矩阵的转置
# print(array32.transpose())
# [[1 4]
#  [2 5]
#  [3 6]]

# take() 方法: 从数组中取指定索引的元素,类似于花式索引
array34 = array33.take([0,2,-3,-1])
# print(array34)  # [  3  35  95 554] 

# tolist() 方法: 将数组转成python中的 list
```

\`