数据统计与分析-Numpy入门

Numpy入门

新手建议使用pycharm当中的jupyter notebook模块

导包

python 复制代码
import numpy as np
import pandas as pd
import os
os.chdir(r'D:\Workspace\Work-20\numpyProject') #做个演示,选择更改路径

1.演示Numpy的属性

演示

python 复制代码
# 1. 创建1个 ndarray数组
arr = np.arange(15, dtype=np.int64).reshape((3, 5))  # 3行5列, 二维数组 = 3个一维数组拼接, 每个一维数组有5个元组.
# 2. 打印arr对象
arr
打印Numpy数据类型
python 复制代码
打印arr的属性, 即: ndarray对象的属性.
print(f'arr的数据类型: {type(arr)}')  # <class 'numpy.ndarray'>
shape()形状维度
python 复制代码
print(f'arr的形状(维度): {arr.shape}')  # (3, 5)
ndim() 轴
python 复制代码
print(f'arr的轴: {arr.ndim}')  # 2, 几维数组, 轴就是几
dtype() 元素类型
python 复制代码
print(f'arr的元素类型: {arr.dtype}')  # int
size()元素个数
python 复制代码
print(f'arr的元素个数: {arr.size}')  # 15
itemsize()每个匀速所占大小
python 复制代码
print(f'arr每个元素的大小: {arr.itemsize}')  # 4

2.创建Numpy对象

2.1数组方式创建,函数:arrray()

python 复制代码
# 细节: 数组的元素类型要统一
# 1. 数组方式创建 ndarray对象(Numpy的核心对象, 即: n维数组)
arr1 = np.array([1, 2, 3])
print(f'arr的内容: {arr1}')
print(f'arr的类型: {type(arr1)}')
print(f'arr的元素类型: {arr1.dtype}')  # int32
python 复制代码
# 2. 数组方式创建 ndarray对象(Numpy的核心对象, 即: n维数组)
arr2 = np.array([1.1, 2.3, 3.5])
print(f'arr2的内容: {arr2}')
print(f'arr2的类型: {type(arr2)}')
print(f'arr2的元素类型: {arr2.dtype}')  # float64

2.2创建空的ndarray对象

2.2.1 zeros()
python 复制代码
# 细节:获取的元素类型都是: float64
# 1. 演示 zeros()函数, 创建1个全是0的ndarray对象.
arr3 = np.zeros((3, 5))  # 维度: 3行5列, 1个二维数组, 它有3个元素(每个都是1维数组), 且每个一维数组有5个元素.
print(f'arr3的内容: {arr3}')
print(f'arr3的类型: {type(arr3)}')
print(f'arr3的元素类型: {arr3.dtype}')  # float64
2.2.2 ones()
python 复制代码
# 2. 演示 ones()函数, 创建1个 全是1的 ndarray对象.
arr4 = np.ones((2, 3))  # 维度: 2行3列, 1个二维数组, 它有2个元素(每个都是1维数组), 且每个一维数组有3个元素.
print(f'arr4的内容: {arr4}')
print(f'arr4的类型: {type(arr4)}')
print(f'arr4的元素类型: {arr4.dtype}')  # float64
2.2.3 empty()
python 复制代码
# 3. 演示 empty()函数, 创建1个 内容随机且依赖内存状态的 ndarray对象.
arr5 = np.empty((2, 3))  # 维度: 2行3列, 1个二维数组, 它有2个元素(每个都是1维数组), 且每个一维数组有3个元素.
print(f'arr5的内容: {arr5}')
print(f'arr5的类型: {type(arr5)}')
print(f'arr5的元素类型: {arr5.dtype}')  # float64

2.3创建1个指定范围,步长的ndarray对象:arange()

python 复制代码
# 1. 创建1个 指定范围,步长的 ndarray对象, arange()函数 类似于 Python中的 range()函数.
# 参1: 起始值(start), 参2: 结束值(不包括) stop,  参3: 步长, step.  参4: 数据类型, dtype
arr6 = np.arange(0, 10, 2, dtype=np.int64)
print(f'arr6的内容: {arr6}')
print(f'arr6的类型: {type(arr6)}')
print(f'arr6的元素类型: {arr6.dtype}')  # float64

2.4创建二维矩阵:matrix()

python 复制代码
# 细节: mat() = matrix(), 效果一致.
# 1. 创建2维矩阵.
# arr7 = np.mat('1 2 3;4 5 6')
arr7 = np.matrix('1 2 3;4 5 6')
print(f'arr7的内容: {arr7}')
print(f'arr7的类型: {type(arr7)}')  # matrix类型是 ndarray类型的 子类型.
print(f'arr7的元素类型: {arr7.dtype}')  # float64
python 复制代码
# 2. 创建2维矩阵.
arr8 = np.mat('1,2,3;4,5,6')
print(f'arr8的内容: {arr8}')
print(f'arr8的类型: {type(arr8)}')  # matrix类型是 ndarray类型的 子类型.
print(f'arr8的元素类型: {arr8.dtype}')  # float64
python 复制代码
# 3. 创建2维矩阵.
arr9 = np.mat(([1, 2, 3], [4, 5, 6]))  # (第1个1维数组, 第2个一维数组...)
print(f'arr9的内容: {arr9}')
print(f'arr9的类型: {type(arr9)}')  # matrix类型是 ndarray类型的 子类型.
print(f'arr9的元素类型: {arr9.dtype}')  # float64

2.5创建随机的ndarray对象

2.5.1 random.rand():创建0.0 ~ 1.0区间的随机数.
python 复制代码
# 1. random.rand()函数, 创建0.0 ~ 1.0区间的随机数.
arr10 = np.random.rand(3, 5)  # 3行5列
print(f'arr10的内容: {arr10}')
print(f'arr10的类型: {type(arr10)}')  # <class 'numpy.ndarray'>
print(f'arr10的元素类型: {arr10.dtype}')  # float64
2.5.2 random.randint():可以指定范围, 生成: 整数的随机数
python 复制代码
# 2. random.randint()函数, 可以指定范围, 生成: 整数的随机数
arr11 = np.random.randint(1, 10, size=(3, 5))  # 3行5列
print(f'arr11的内容: {arr11}')
print(f'arr11的类型: {type(arr11)}')  # <class 'numpy.ndarray'>
print(f'arr11的元素类型: {arr11.dtype}')  # float64
2.5.3 random.unifom():可以指定范围, 生成: 小数的随机数
python 复制代码
# 3. random.uniform()函数, 可以指定范围, 生成: 小数的随机数
arr12 = np.random.uniform(1, 10, size=(3, 5))  # 3行5列
print(f'arr12的内容: {arr12}')
print(f'arr12的类型: {type(arr12)}')  # <class 'numpy.ndarray'>
print(f'arr12的元素类型: {arr12.dtype}')  # float64

2.6类型转换

对象名.astype(np.类型)
python 复制代码
# 1. 创建1个 ndarray对象, 元素类型为: float64
arr13 = np.zeros((3, 5), dtype=np.float64)
print(arr13)
print(arr13.dtype)  # float64
python 复制代码
# 2. 把上述的 arr13 从 float64 => int32
arr14 = arr13.astype(np.int32)
print(arr14)
print(arr14.dtype)  # int32

2.7等差和等比数列

2.7.1等比数列
logspace(): 等比数列, 默认是: 10的幂, 且: 包左包右
python 复制代码
# 1. logspace(): 等比数列, 默认是: 10的幂, 且: 包左包右
arr15 = np.logspace(1, 3, 5)  # 生成10 ^ 1 ~ 10 ^ 3之间, 5个元素
print(f'arr15的内容: {arr15}')
print(f'arr15的类型: {type(arr15)}')  # <class 'numpy.ndarray'>
print(f'arr15的元素类型: {arr15.dtype}')  # float64
logspace(): 等比数列, 默认是: 10的幂, 且: 包左包右, 指定底数.
base= 指定底数
python 复制代码
# 2. logspace(): 等比数列, 默认是: 10的幂, 且: 包左包右, 指定底数.
arr15 = np.logspace(1, 3, 5, base=2)  # 生成2 ^ 1 ~ 2 ^ 3之间, 5个元素
print(f'arr15的内容: {arr15}')
print(f'arr15的类型: {type(arr15)}')  # <class 'numpy.ndarray'>
print(f'arr15的元素类型: {arr15.dtype}')  # float64
2.7.2等差数列
linspace默认包左包右, endpoint:默认是True既包括结束值
python 复制代码
# 3. linspace(): 等差数列, 默认: 包左包右.
arr16 = np.linspace(1, 10, 5)  # 1 ~ 10之间的, 5个元素.
print(f'arr16的内容: {arr16}')
print(f'arr16的类型: {type(arr16)}')  # <class 'numpy.ndarray'>
print(f'arr16的元素类型: {arr16.dtype}')  # float64
python 复制代码
# 4. linspace(): 等差数列, 默认: 包左包右.    endpoint: 默认是True(即: 包括结束值)
arr17 = np.linspace(1, 10, 5, endpoint=False)  # 1 ~ 10之间的, 5个元素.
print(f'arr17的内容: {arr17}')
print(f'arr17的类型: {type(arr17)}')  # <class 'numpy.ndarray'>
print(f'arr17的元素类型: {arr17.dtype}')  # float64

3.numpy的函数

3.1基本函数

python 复制代码
# 1. 创建1个正太分布的 ndarray对象.
arr = np.random.randn(2, 3)
arr
ceil():向上最接近的整数
floor():向下最接近的整数
rint():四舍五入
isnan():判断元素是否为空
multiply():乘法运算
divide():除法运算
abs():绝对值
where(conditltion,x,y):类似于三元运算符.
python 复制代码
#注意:要使用multiply与divide,两个ndarray进行运算shape必须一致.
print(np.ceil(arr))  # 向上取整, 天花板数.
print(np.floor(arr))  # 向下取整, 地板数.
print(np.rint(arr))  # 四舍五入
print(np.isnan(arr))  # 判断是否是: 空值.
print(np.abs(arr))  # 绝对值
print(np.multiply(arr, arr))  # 乘法运算. 
print(np.divide(arr, arr))  # 除法运算. 
print(np.where(arr > 0, 1, -1))  # 转换, 大于0的 => 1, 否则 => -1

3.2统计函数

python 复制代码
# 1. 创建1个 ndarray对象.
arr = np.arange(12).reshape(3, 4)  # 3行4列, 二维数组
arr
python 复制代码
# 2. 统计函数
print(np.sum(arr))  # 求和: 66
print(np.cumsum(arr))  # 求和: [ 0  1  3  6 10 15 21 28 36 45 55 66]
pytyhon 复制代码
# 3. 按行或者列进行求和, axis=0 或者 1     0 => 按列计算,  1 => 按行计算
print(np.sum(arr, axis=0))  # [12 15 18 21]
print(np.sum(arr, axis=1))  # [ 6 22 38]

3.3判断相关

python 复制代码
# 1. 创建1个 ndarray对象.
arr = np.random.randn(2, 3)
arr
python 复制代码
# 2. 演示 any()函数: 任意1个值满足条件即可, 类似于Python中的 or
print(np.any(arr > 0))  # True
python 复制代码
# 3. 演示 all()函数: 要求所有的元素都要满足, 类似于Python的and
print(np.all(arr > 0))  # False

3.4去重并排序

python 复制代码
# 1. 创建1个 ndarray对象.
arr = np.array([[3, 2, 1, 2], [2, 6, 5, 5]])
print(arr)
python 复制代码
# 2. 对上述的 ndarry去重
print(np.unique(arr))  # [1 2 3 5 6]

3.5去重并排序

python 复制代码
# 1. 创建1个 ndarray对象.
arr = np.array([3, 1, 2, 5, 6])
print(f'排序前: {arr}')
python 复制代码
# 2. 排序, 方式1: np.sort(arr) => 返回1个新的ndarray对象.
# np.sort(arr)
# print(f'排序后: {arr}')

new_arr = np.sort(arr)
print(f'排序后: {new_arr}')
python 复制代码
# 3. 排序, 方式2: arr.sort() => 对自身进行排序.
arr.sort()
print(f'排序后: {arr}')

4.Numpy的运算

4.1基本运算 :元素个数相等
python 复制代码
# 1. 创建两个 ndarray对象.
arr1 = np.array([10, 20, 30, 40])
arr2 = np.arange(4)
python 复制代码
# 2. 打印上述的两个对象.
print(f'arr1: {arr1}')
print(f'arr2: {arr2}')
python 复制代码
# 3. 基本运算, 并输出结果.
arr3 = arr1 - arr2
print(f'arr3: {arr3}')      # [10 19 28 37]
4.2矩阵运算
场景1: A的列数 = B的行数 且 A的列数 = B的列数
python 复制代码
# 1. 创建两个 ndarray对象.
arr1 = np.array([[1, 2], [4, 5]])
arr2 = np.array([[1,3], [4, 6]])

# 2. 打印内容.
print(f'arr1: {arr1}')
print(f'arr2: {arr2}')
python 复制代码
# 2. 矩阵运算, 场景1: A的列数 = B的行数  且 A的列数 = B的列数
# arr3 = arr1 * arr2
arr3 = np.multiply(arr1, arr2)
print(f'arr3: {arr3}')
场景2: A的列数 = B的行数 且 A的列数 != B的列数
python 复制代码
# 3. 矩阵运算, 场景2: A的列数 = B的行数  且 A的列数 != B的列数
# 假设: A => 2行3列,    B => 3行2列  

# 3.1 创建两个ndarray对象.
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[1, 2], [4, 5], [-6, 7]])

# 3.2 打印内容
print(f'arr1: {arr1}')
print(f'arr2: {arr2}')
python 复制代码
# 3.3 矩阵运算.
print(np.dot(arr1, arr2))
print(arr1.dot(arr2))       # [[-9, 33], [-12, 75]]
相关推荐
敲代码不忘补水3 天前
Python Matplotlib 数据可视化全面解析:选择它的七大理由与入门简介
开发语言·python·信息可视化·numpy·pandas·matplotlib
取个名字真难呐5 天前
2、PyTorch张量的运算API(上)
pytorch·python·numpy
敲代码不忘补水5 天前
pandas 机器学习数据预处理:从缺失值到特征切分的全面解析
人工智能·后端·python·机器学习·numpy·pandas·matplotlib
小青头10 天前
numpy学习笔记
笔记·学习·numpy
取个名字真难呐10 天前
矩阵乘法实现获取第i行,第j列值,矩阵大小不变
python·线性代数·矩阵·numpy
小锋学长生活大爆炸11 天前
【教程】Cupy、Numpy、Torch互相转换
pytorch·numpy·cupy
鱼灯几许12 天前
Python爬虫
爬虫·python·numpy
爱折腾的小码农13 天前
记一次宝塔centos出现Failed to start crond.service: Unit crond.service not found.解决
python·centos·numpy
正义的彬彬侠15 天前
XGBoost算法Python代码实现
python·决策树·机器学习·numpy·集成学习·boosting·xgboost
竹笋常青17 天前
《流星落凡尘》
django·numpy