numpy

numpy使用

一.为什么使用numpy

一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型、多维数组上执行数值运算.
Numpy内部解除了Python的PIL(全局解释器锁),运算效率极好,是大量机器学习框架的基础库!

二.numpy的基本使用
1. 创建数组
import numpy as np
import random


# 创建数组
t1 = np.array(range(1, 10))
print(t1)
# 判断t1的类型
print(t1.dtype)

# 方法二
t2 = np.arange(4, 10, 2)  # arrange(start,end,step),开始值到结束值每隔2,取一个值
print(t2)
print(t2.dtype)

# numpy的数据类型
t3 = np.array(range(12), dtype="float")  # 设置t3的类型为float类型
print(t3)
print(t3.dtype)

# 修改类型
t4 = np.array([random.random() for i in range(10)], dtype="float")
print(t4)
print(t4.dtype)

# a = np.array([1, 0, 0, 1], dtype=bool)
# a.astype(np.int8)  
# print(a)
# print(a.dtype)

t5 = np.round(t4, 3)  # 取t4的三位小数
print(t5)

# 数组的形状
t6 = np.array([[1, 2, 3, 4, 5, 6]])
print(t6.shape)
print(t6)

# 改变形状
t7 = t6.reshape(2, 3)
print(t7)
print(t7.shape)

# 变成一维数组
t8 = t7.flatten()
print(t8.shape)
print(t8)

在这里插入图片描述

2.numpy 的数据类型

在这里插入图片描述

3.numpy中数组的计算
  • 相同形状的数组,加减乘除都是在相对应的位置上进行操作

在这里插入图片描述

  • 不同形状的数组则要在相同轴上的位置进行操作
    在这里插入图片描述
    在这里插入图片描述
4. numpy的广播原则(轴)

在numpy中可以理解为方向,使用0,1,2…数字表示,对于一个一维数组,只有一个0轴,对于2维数组(shape(2,2)),有0轴和1轴,对于三维数组(shape(2,2, 3)),有0,1,2轴

二维的 轴

在这里插入图片描述

三维的轴

在这里插入图片描述

5. numpy读取数据

CSV:Comma-Separated Value,逗号分隔值文件
显示:表格状态
源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录

由于csv便于展示,读取和写入,所以很多地方也是用csv的格式存储和传输中小型的数据,为了方便教学,我们会经常操作csv格式的文件,但是操作数据库中的数据也是很容易的实现的

# fname:文件名,dtype:数据类型,delimiter:分割符,比如csv文件的分隔符是","
np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)

在这里插入图片描述

6.numpy的转置

转置是一种变换,对于numpy中的数组来说,就是在对角线方向交换数据,目的也是为了更方便的去处理数据
方式一
在这里插入图片描述
方式二,三
在这里插入图片描述
swapaxes直接将0轴和1轴进行互换,达到转置的作用,剩下两种则是直接调用,不难理解

7.numpy索引和切片

学习这个的原因:可以更好的准确的取一个数组指定的行和列所指向的数据.

import numpy as np


# 创建数组
array = np.arange(24).reshape(4, 6).astype(float)
print("array:")
print(array)
# 打印第二行后所有的数据
print("第二行后所有的数据:")
print(array[2:])
# 打印1-3行
print("1-3行所有的数据:")
print(array[1:3])
# 打印2-4列
print("2-4列所有的数据:")
print(array[:, 2:4])
# 打印1-3行,2-5列的数据
print("1-3行,2-5列所有的数据:")
print(array[1:3, 2:5])

结果:
在这里插入图片描述

7.1 numpy中的布尔索引
import numpy as np


# 创建数组
array = np.arange(24).reshape(4, 6).astype(float)
print("array:")
print(array)

print("判断是否小于10:")
print(array < 10)

# 将值进行替换
array[array < 10] = 0
print("将小于10的索引位置的值改为0")
print(array)

在这里插入图片描述

7.2 numpy中的三元运算符where
import numpy as np


# 创建数组
array = np.arange(24).reshape(4, 6).astype(float)
print("array:")
print(array)

# 将小于10的赋值为0,大于的赋值为10
array = np.where(array < 10, 0, 10)
print("改变后的结果为")
print(array)

在这里插入图片描述

7.3 裁剪(clip)

我们要把小于10的赋值为10,大于15的赋值为15,此时该怎么做呢,而用where则不行,单独的两次布尔改值有比较麻烦,
array[array < 10] = 10 array[array > 15] = 15
所以此时用裁剪就比较方便

import numpy as np


# 创建数组
array = np.arange(24).reshape(4, 6).astype(float)
print("array:")
print(array)

# 裁剪
print("裁剪后的结果:")
print(array.clip(10, 18))

在这里插入图片描述

8.numpy中的nan和inf
  nan(NAN,Nan):not a number表示不是一个数字

什么时候numpy中会出现nan:
当我们读取本地的文件为float的时候,如果有缺失,就会出现nan
当做了一个不合适的计算的时候(比如无穷大(inf)减去无穷大)

   inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷

什么时候回出现inf包括(-inf,+inf)
比如一个数字除以0,(python中直接会报错,numpy中是一个inf或者-inf)

nan 和 inf 的数据类型都是float

在这里插入图片描述

9.numpy中的计算
  • 1.求和
  • np.sum(array,axis=None) = array.sum(axis=None)
  • array为求取的数组
  • axis=0求取每一列的和
  • axis=1求取每一行的和
  • 2.求平均值
  • np.mean(array,axis=None) = array.mean(axis=None)
  • array为求取的数组
  • axis=0求取每一列的均值
  • axis=1求取每一行的均值
  • 3.求中值
  • np.median(array,axis=None) ≠ array.median(axis=None)
    • array为求取的数组
  • axis=0求取每一列的中值
  • axis=1求取每一行的中值
  • 4.求取最大值
  • np.max(array,axis=None) = array.max(axis=None)
  • 5.求取最小值
  • np.min(array,axis=None) = array.min(axis=None)
  • 6.求极值(也就是最大值与最小值只差)
  • np.ptp(array,axis=None) ≠ array.ptp(axis=None)
  • 7.求标准差
  • np.std(array,axis=None)
  • 8.获取最大值的位置
  • np.argmax(array,axis=None)
  • 9.获取最小值的位置
  • np.argmin(array,axis=None)
  • 10.创建全为0的数组
  • t = np.zeros((3, 4)) # shape为3 x 4 全为0的数组
  • 11.创建全是1的数组
  • t =np.ones((3, 4)) # shape为3 x 4 全为0的数组
  • 12.创建一个对角线为1的正方形数组(方阵):
  • t = np.eye(3) # shape为3 x 3全是1的数组
  • 13.随机数np.random.之下
  • 在这里插入图片描述
import numpy as np


# 创建数组
array = np.arange(24).reshape(4, 6).astype(float)
print("array:")
print(array)

# 求取array的总和
print("数组总和")
print(np.sum(array))

# 求每一列和的值
t = np.sum(array, axis=0)
print("每一列的和")
print(t)

# 求每一行和的值
t = np.sum(array, axis=1)
print("每一行的和")
print(t)

# 求取array的平均值
print("数组的均值")
print(np.mean(array))

# 求每一列的均值
t = np.mean(array, axis=0)
print("每一列的均值")
print(t)

# 求每一行的均值
t = np.mean(array, axis=1)
print("每一行的均值")
print(t)

# 求取中值
print("数组的中值")
print(np.median(array))

# 求每一列的中值
t = np.median(array, axis=0)
print("每一列的中值")
print(t)

# 求每一行的中值
t = np.median(array, axis=1)
print("每一行的中值")
print(t)

在这里插入图片描述

import numpy as np


# 创建数组
array = np.arange(24).reshape(4, 6).astype(float)
print("array:")
print(array)
array[1:3, 2:5] = np.nan
print("用nan赋值后的数组")
print(array)

for i in range(array.shape[1]):  # 遍历每一列
    temp_col = array[:, i]  # 获取每一列的元素值
    nan_num = np.count_nonzero(np.isnan(temp_col))  # 得到nan的数量

    if nan_num > 0:  # 判断nan是否存在
        temp_not_nan_col = temp_col[temp_col == temp_col]
        # 选中nan的位置,用均值替换
        temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()
print("结果")
print(array)

在这里插入图片描述

9.数组的拼接

在这里插入图片描述

10.numpy 更为具体的操作

https://blog.youkuaiyun.com/a373595475/article/details/79580734

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值