公众号:uncle39py

V1

2022/01/13阅读:30主题:默认主题

numpy

numpy的本质功能是数组数据类型。可以理解成与python原生数据类型同等地位(承接某种特性的数据)。可以是1维、2维...n维数组。

数组内部的数据类型必须相同(由于数据类型同质,所以计算速度快)

固定套路:

pip install numpy

import numpy as np

一、数组的创建

1、np的array函数,可以把list,tuple等数据转化为数组 2、如果数组中有数据类型不一致,会自动转化数据类型为一致:int->float->str

array1 = np.array([1,3.5,4])
# 输出array([1. , 3.5, 4. ])

3、二维数组:np.array(列表套列表),比如np.array([[1,2],[3,4]]),n维数组依此类推。

二、数组的介绍

1、两个数组的加减乘除运算都是两个数组对应位置的数据的加减乘除,返回一个新的数组

2、数组可以和单一的值进行运算

x = np.array([1,3,4])
# x*9返回array([ 9, 27, 36])

3、判断两个数组是否相同x==y,也是对应位置的数据进行比较,返回的也是数组array([False, False, False])

4、np.nan !=np.nan,np.nan是np中的空值, np中的空值不等于任何值

5、既然是对应位置的计算,必须保证数组结构相同,即:都存在对应位置的数据。

6、arr.shape 查看数组的形状,返回一个包含数组维度信息的元组

arr = np.array([[1,3,4],[2,34,5]])
arr.shape
# 输出(2,3),表示两行三列。元组内有几个数字代表几维数组。

7、

arr.dtype 查看数组内部数据的类型
arr.size  查看数组内部数据的个数
arr.ndim  查看数组的维度,几维数组

8、矩阵

x = np.matrix([[1,3,4],[2,34,5]]),矩阵是什么先不急着搞懂,矩阵和数组有一个方面不一致:矩阵乘法。数组相乘是对应位置相乘,矩阵乘法是另外的规则。

9、创建数组时ndmin参数直接指定维度

m = np.array([1,3,4],ndmin=3)

可以用上面介绍的m.ndim,m.shape来查看维度和形状

10、常用数组

np.zeros([4,3])全0数组,参数表示shape

np.ones([2,2,4])全1数组,参数表示shape

np.random.rand(2,2,3),参数表示shape,生成[0,1)间的随机数组

np.random.randint(1,10,(2,2,3)),前两个参数表示整形数值的取值范围(左闭右开),后面的元组表示shape

np.random.randn(2,2,3),与np.random.rand(2,2,3)类似,只不过生成的数组是满足标准正态分布的随机数组。

np.arange(1,10,2)与python中的range相似:开头、结尾、步长、左闭右开。只不过arange返回的是一维数组

np.linspace(1,10,20)生成一维数组,前两个数是指定范围[1,10],后一个参数是数组个数为20个值,实际上是20等分。

11、数组形状变换

a = np.random.randn(2,10)
b = a.reshape(4,5)
# a是一个2行10列的数组
# a.reshape(4,5)后,数组a并不会改变,而是会依据a的值生成一个新的4行5列的新数组。

c = a.reshape(1,-1)
# 新生成的数组不改变维度,但是被拉平成1行n列,-1代表占位

d = a.reshape(-1,1)
# 同样的,不改变维度,但是被变成了1列n行,-1代表占位

e = a.flatten()
f = a.ravel()
# 这两个函数是一样的
# 功能与a.reshape(1,-1)类似:被拉平成1行n列
# 但是不同的是,reshape不改变维度,而这两个函数都会把新生成的数组降为一维。

12、转置:行列互换

arr1.T原数组不发生改变,新生成一个数组,行列互换

三、数组的索引和切片

与原生python中的列表和字符串的索引与切片类似。索引比原数组降一个维度,切片与原数组同一个维度。

a = np.random.randint(1,10,(2,2,3))
# array([[[6, 3, 8],
        [845]],
       [[954],
        [463]]])
a[1]
# array([[9, 5, 4],
       [463]])
# a原先是2块2行3列的shape,它的组成部分是a[0],a[1];
# a[0],a[1]比a降一个维度
# 但是a的切片是与a同一个维度的比如
a[1:2]
#array([[[9, 5, 4],
        [463]]])

a[0][2] 与 a[0,2]两种写法等价
a[:3,1:2] 与a[0:3][1:2]写法上等价


再介绍一个布尔索引,还是上面这个数组a
a = np.random.randint(1,10,(2,2,3))
# array([[[6, 3, 8],
        [845]],
       [[954],
        [463]]])
a>5  会把a里面的所有值与5进行比较,返回下面的数组
#array([[[ True, False,  True],
        [ TrueFalseFalse]],
       [[ TrueFalseFalse],
        [False,  TrueFalse]]])
a[a>5
#array([6, 8, 8, 9, 6]),会把大于5的值提取出来

四、广播功能

本质是numpy处理不同形状数组计算时候的能力。先了解下它是什么。

分类:

人工智能

标签:

人工智能

作者介绍

公众号:uncle39py
V1