Numpy的使用

4-1 Numpy介绍与安装

为什么使用Numpy?

​ 因为Numpy的底层实现是使用C++语言来编写的。执行效率会非常的高

Numpy是什么?

​ Numpy(Numerical Python) 是目前Python数值计算中最为重要的基础包。大多数计算包都提供了基于Numpy的科学函数功能,将Numpy的数组对象作为数据交换的通过语。

Numpy特点
  • 提供高效多维数组
  • 提供了基于数组的便捷算术操作以及广播机制
  • 对数阶进行快熟的矩阵计算
  • 对硬盘中数组进行读写操作
Numpy安装

pip install Numpy

官方文档

https://numpy.org/devdocs/user/quickstart.html

4-2 Numpy基本操作

创建N-维数组对象

​ 生成数组最简单的方式就是使用array函数。array函数接收任意的序列对象,生成一个新的包含传递数据的Numpy数组

  • numpy.array(object)

    • import numpy as np
      li = [1,2,3,4]
      arr = np.array(li)
      arr   # array([1, 2, 3, 4])
      
  • numpy.arange([start,]stop[,step,])`

    • import numpy as np
      arr = np.arange(1,5)
      arr   # array([1, 2, 3, 4])
      
注意
  • ndarray数组是一个通用的多维同类数据容器,意味着数组里面每一个元素均为相同类型。
数组的数据类型
类型类型代码描述
int8,uint8i1,u1有符号和无符号的8数位整数
int16,uint16i2,u2有符号和无符号的16数位整数
int32,uint32i4,u4有符号和无符号的32数位整数
int64,uint64i8,u8有符号和无符号的64数位整数
float16f2半精度浮点数
float32f4标准单精度浮点数
float64f8标准双精度浮点数
bool?布尔值,存储True或False
string_SASCII字符串类型,eg:‘S10’
unicode_UUnicode类型,eg:‘U10’
查看数组数据类型
  • arr.dtype
    • 会自动推断生成数组的数据类型
指定数组的数据类型
  • numpy.array(object,dtype=None)
    • 创建数组时通过dtype直接指定
  • arr.astype(dtype)
    • 修改数组的指定类型
数组形状
  • arr.ndim
    • 查看数组的维度,返回值为整数
  • arr.shape
    • 查看数组的,返回值为整数
    • 一维:返回的结果为(列,)
    • 二维:返回的结果为(行,列)
    • 三维:返回的结果为(块,行,列)
N-维数组对象
  • 二维

    • 在这里插入图片描述
  • 三维

    • 在这里插入图片描述
重塑数组

一维转多维

  • arr.reshape(shape, order="C")

    • shape为数组重塑形状

    • order表示重塑方向

      • C顺序(行方向)重塑
      • F顺序(列方向)重塑
    • import numpy as np
      arr = np.arange(6)
      arr.reshape((2,3))
      

多维转一维

  • arr.flatten()
  • arr.ravel()

数组转置与换轴

  • arr.transpose()
    • 转置
  • arr.T
    • 转置
  • arr.swapaxes()
    • 换轴
创建数组其他函数
函数名描述
array将输入数据转换为ndarray数组,自动推断数据类型,默认复制所有输入数据 (类似于浅拷贝)
asarray将输入数据转换为ndarray数组,但输入数据已经是ndarray则不再复制(类似于深拷贝)
arangepython内建函数range的数组版,返回一个数组
zeros根据给定形状和数据类型生成全0数组
ones根据给定形状和数据类型生成全1数组
empty根据给定形状和数据类型生成一个没有初始化数值的空数组
full根据给定形状和数据类型生成指定数值的数组
Numpy数组算术

​ 数组之所以重要是因为它允许我们进行批量操作数据并且没有任何for循环。也被称之为向量化

数组与标量的算术操作

​ 数组与标量的算术操作会把计算参数传递给数组的每一个元素

广播的原则

​ 广播的原则:如果两个数组的后缘维度的轴长度相符,或其中的乙方的长度位1,则认为它们是广播兼容的。广播会在缺失和或长度为1的维度上进行。

​ 这句话乃是理解广播的核心。广播主要发生在两种情况,一种是两个数组的维数不相等,但是它们的后缘维度的轴长相符,另外一种是有一方的长度为1。

数组维度不同,后缘维度的轴长相符

import numpy as np

arr1 = np.array([[0, 0, 0],[1, 1, 1],[2, 2, 2], [3, 3, 3]])  #arr1.shape = (4,3)
arr2 = np.array([1, 2, 3])    #arr2.shape = (3,)
arr_sum = arr1 + arr2
print(arr_sum)

输入结果如下:
'''
[[1 2 3]
 [2 3 4]
[3 4 5]
[4 5 6]]
'''

​ 上例中arr1的shape为(4,3),arr2的shape为(3,)。可以说前者是二维的,而后者是一维的。但是它们的后缘维度相等,arr1的第二维长度为3,和arr2的维度相同。arr1和arr2的shape并不一样,但是它们可以执行相加操作,这就是通过广播完成的,在这个例子当中是将arr2沿着0轴进行扩展。

在这里插入图片描述

数组维度相同,其中有个轴为1

import numpy as np

arr1 = np.array([[0, 0, 0],[1, 1, 1],[2, 2, 2], [3, 3, 3]])  #arr1.shape = (4,3)
arr2 = np.array([[1],[2],[3],[4]])    #arr2.shape = (4, 1)

arr_sum = arr1 + arr2
print(arr_sum)

输出结果如下:
[[1 1 1]
 [3 3 3]
 [5 5 5]
 [7 7 7]]

​ arr1的shape为(4,3),arr2的shape为(4,1),它们都是二维的,但是第二个数组在1轴上的长度为1,所以,可以在1轴上面进行广播,如下图所示:

img

​ 在这种情况下,两个数组的维度要保证相等,其中有一个轴的长度为1,这样就会沿着长度为1的轴进行扩展。

import numpy as np

# 1.输出0-9的数组arr
arr = np.array(range(10))

# 2.查看arr的数据类型
arr.dtype

# 3.创建0-5的数组arr1,并指定其数据类型为"bool"   dtype为指定类型
arr1 = np.array(range(6),dtype='bool')
arr1

# 4.改变arr1的数据类型为"float64"
arr1.astype('float64')

# 5.输出0-15这16个元素中分成4行4列
arr2 = np.arange(16).reshape(4,4)
arr2

# 6.输出0-26这27个元素中分成3块3行3列
arr3 = np.arange(27).reshape(3,3,3)
arr3

# 7.输出4*4全为0的矩阵
# zeros 传入的为元组数组
arr4 = np.zeros((4,4))
arr4

# 8.输出2*3全为1的矩阵
arr5 = np.ones((2,3))
arr5

# 9.输出2*4全为8的矩阵
arr6 = np.full((2,4),8)
arr6

# 10.np.array()与np.asarray()区别。代码演示结合文字说明
data = np.arange(6)
arr1 = np.array(data)
arr2 = np.asarray(data)
data[1] = 66

print(arr1)     #  array 相当于复制,浅拷贝,
print(arr2)     #  asarray 相当于复制,深拷贝

# 11.np.ones()与np.ones_like()区别。代码演示结合文字说明
# ones 生成的是全部为浮点数的数组
# ones_like 生成一个和你所给的数组相同shape的全为1的数组
arr8 =  np.arange(6).reshape(2,3)
np.ones_like(arr8)   

# 12.创建一个3*3的二维数组并将其降为一维
arr = np.arange(6).reshape(2,3)
arr.flatten()

# 15.np.arange(16).reshape(4,4)与2做减法运算
arr9 = np.arange(16).reshape(4,4)
arr9+2

# 16.np.arange(16).reshape(4,4)与np.arange(16,32).reshape(4,4)做加法运算
arr10 = np.arange(16).reshape(4,4)
arr11 = np.arange(16,32).reshape(4,4)
arr10 + arr11

# 17.np.arange(8).reshape(2,4)与np.arange(4)运算吗?
# 对应位相加
arr12 = np.arange(8).reshape(2,4)
arr13 = np.arange(4)
print(arr12)
print(arr13)
print(arr12.shape)
print(arr13.shape)

arr12 + arr13

# 18.np.arange(8).reshape(2,4)与np.arange(4).reshape(1,4)运算吗?
arr14 = np.arange(8).reshape(2,4)
arr15 = np.arange(4).reshape(1,4)

print(arr14.shape)
print(arr15.shape)

arr14 + arr15

# 19.np.arange(8).reshape(2,4)与np.arange(4).reshape(4,1)运算吗?¶
# 当行与列中数组对不上,都不能进行运算
arr16 = np.arange(8).reshape(2,4)
arr17 = np.arange(4).reshape(4,1)

print(arr16.shape)
print(arr17.shape)

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值