python_numpy

numPy、Scipy、pandas、matplotlib简介

numpy——基础,以矩阵为基础的数学计算模块,纯数学存储和处理大型矩阵。 这个是很基础的扩展,其余的扩展都是以此为基础。****

scipy——数值计算库,在numPy库的基础上增加了众多的数学、科学以及工程计算中常用的库函数。 方便、易于使用、专为科学和工程设计的Python工具包.它包括统计,优化,整合,线性代数模块,傅里叶变换,信号和图像处理,常微分方程求解器等等。

pandas——数据分析,基于numPy 的一种工具,为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。

matplotlib——绘图,对于图像美化方面比较完善,可以自定义线条的颜色和式样,可以在一张绘图纸上绘制多张小图,也可在一张图上绘制多条线,可以很方便的对数据进行可视化分析。

NumPy核心数据结构:ndarray

NumPy的数组类被称作ndarray。通常被称作数组。注意numpy.array和标准Python库类array.array并不相同,后者只处理一维数组和提供少量功能。
一种由相同类型的元素组成的多维数组,元素数量是事先给定好的
元素的数据类型由dtype(data-type)对象来指定,每个ndarray只有一种dtype类型
ndarray的大小固定,创建好数组后数组大小是不会再发生改变的

**

array函数:接收一个普通的python序列,并将其转换为ndarray

**
np.array([
[
[1,2,3],
[4,5,6]
],
[
[4,5,6],
[7,8,9]
]
])

array([[[1, 2, 3],
[4, 5, 6]],
[[4, 5, 6],
[7, 8, 9]]])

zeros函数:创建指定长度或者形状的全零数组。

np.zeros((3,3))

array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])

生成三行三列都是1的元素。

arange函数: 类似python的range函数,通过指定开始值、终值和步长来创建一个一维数组,注意:最终创建的数组不包含终值

np.arange(9)

array([0, 1, 2, 3, 4, 5, 6, 7, 8])

linspace函数:通过指定开始值、终值和元素个数来创建一个一维数组,数组的数据元素符合等差数列,可以通过endpoint关键字指定是否包含终值,默认包含终值

np.linspace(0,10,5)

array([ 0. , 2.5, 5. , 7.5, 10. ])

logspace函数:和linspace函数类似,不过创建的是等比数列数组

np.logspace(0,2,5)

在这里插入图片描述

random.randint,随机生成一个三行三列的矩阵

np.random.randint(1,9,size=(3,3))

array([[5, 1, 1],
[3, 3, 2],
[2, 8, 3]])

ndarray对象属性

对象属性

ndim 数组轴(维度)的个数,轴的个数被称作秩

**ndim 数组轴(维度)的个数,轴的个数被称作秩。 
shape 数组的维度, 例如一个2排3列的矩阵,它的shape属性将是(2,3),这个元组的长度显然是秩,即维度或者ndim属性 。
size 数组元素的总个数,等于shape属性中元组元素的乘积。
dtype 一个用来描述数组中元素类型的对象,可以通过创造或指定dtype使用标准Python类型。不过NumPy提供它自己的数据类型。** 

代码如下:

a=np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
])
print('数组的维度',a.ndim)
print('数组的形状',a.shape)
print('数组的元素类型',a.dtype)
print('数组的元素数量',a.size)

输出结果:
数组的维度 2
数组的形状 (3, 3)
数组的元素类型 int32
数组的元素数量 9

NumPy基本数据类型

基本数据类型
基本数据类型

ndarray形状的修改:

默认a是,一行。
a= np.arange(0,20,2)
print(a)
print(a.size)

输出:
[ 0 2 4 6 8 10 12 14 16 18]
10

现在把a改成两行的

b=a.reshape(2,5)
print(b)

[[ 0 2 4 6 8]
[10 12 14 16 18]]

修改b=a是浅拷贝,修改了a也等于修改了b

 b[0][1]=100
print(a)
print(b)

输出结果:
[ 0 100 4 6 8 10 12 14 16 18]
[[ 0 100 4 6 8]
[ 10 12 14 16 18]]

数组与标量之间的运算

arr=np.arange(0,9).reshape(3,3)

print(arr+2)

输出结果:
[[ 2 3 4]
[ 5 6 7]
[ 8 9 10]]

dot()操作

arr1=np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
])
arr2=np.array([
    [1,3,2],
    [4,5,6],
    [7,8,9]
])
print(arr1)
print(arr2)
print(np.dot(arr1,arr2))

[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 3 2]
[4 5 6]
[7 8 9]]
[[ 30 37 41]
[ 66 85 92]
[102 133 143]]

矩阵的切片

二维数组的切片操作,和数组的切片操作类似。
例子如下:

arr2=np.array([[
    [1,3,2],
    [4,5,6],
    [7,8,9]],
    [
     [1,2,3],
    [4,5,6],
    [7,8,9]
]
])
print(arr2)
print(arr2[1][1][0])
print(arr2[1,1,1])
print('这是切片操作',arr2[:,:,1])

输出操作:
[[[1 3 2]
[4 5 6]
[7 8 9]]
[[1 2 3]
[4 5 6]
[7 8 9]]]
4
5
这是切片操作 [[3 5 8]
[2 5 8]]

例子二:

 arr2=np.array([[
    [1,3,2,3],
    [4,5,6,6],
    [7,8,9,10]],
    [
     [1,2,3,4],
    [4,5,6,8],
    [7,8,9,30]
]
])
print('切片操作',arr2[:,:,1:3])

输出:
切片操作 [[[3 2]
[5 6]
[8 9]]
[[2 3]
[5 6]
[8 9]]]

arr2=np.array([[
    [1,3,2,3],
    [4,5,6,6],
    [7,8,9,10]],
    [
     [1,2,3,4],
    [4,5,6,8],
    [7,8,9,30]
]
])
print('只要第一个维度的切片操作',arr2[0,:,1:3])

只要第一个维度的切片操作 [[3 2]
[5 6]
[8 9]]

ndarray花式索引

**指的是利用整数数组进行索引的方式。**

生成一个八行四列的数组,获取0 3 5 行的数据

 	arr = np.random.randint(1,9,size=(8,4))
arr
array([[6, 8, 3, 6],
       [6, 4, 7, 6],
       [4, 5, 1, 5],
       [2, 8, 1, 5],
       [5, 1, 6, 5],
       [1, 1, 7, 3],
       [3, 4, 5, 8],
       [2, 8, 3, 2]])

#获取0 3 5 行数据。
print(arr[[0,3,5]])
[[6 8 3 6]
[2 8 1 5]
[1 1 7 3]]

获取0,0 3,3 5,2 行的数据

#获取0 3 5数据,0,0 3,3 5,2 行数据。
print(arr[[0,3,5],[0,3,2]])

索引器,是获取每一行的后边三个元素、

print(arr[np.ix_([0,3,5],[0,3,2])])

[[6 6 3]
[2 5 1]
[1 3 7]]

常用函数

abs, fabs计算整数、浮点数或者复数的绝对值,对于非复数,可以使用更快的fabs
随机生成一个数组,里面包含负数。用abs如下:

    In [8]:
    arr2=np.random.randint(-5,9,size=(3,3))
    arr2
    
    Out[8]:
    array([[-5,  4,  8],
           [ 1,  3,  7],
           [ 4,  8,  5]])
In [9]:
np.abs(arr2)

Out[9]:
array([[5, 4, 8],
[1, 3, 7],
[4, 8, 5]])

sqrt 计算各个元素的平方根,相当于arr ** 0.5, 要求arr的每个元素必须是非负数

In [12]:
np.sqrt(arr1)
Out[12]:
array([[2.23606798, 2. , 2.82842712],
[1. , 1.73205081, 2.64575131],
[2. , 2.82842712, 2.23606798]])

square,函数计算各个元素的平方,相当于arr ** 2

np.square(arr1)
Out[13]:
array([[25, 16, 64],
[ 1, 9, 49],
[16, 64, 25]], dtype=int32)

计算各个元素的正负号: 1 正数,0:零,-1:负数sign函数

np.sign(arr1)
Out[14]:
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])

计算各个元素的ceiling值,即大于等于该值的最小整数,floor与之相反。

In [15]:
np.ceil(arr1)
Out[15]:
array([[5., 4., 8.],
[1., 3., 7.],
[4., 8., 5.]])

返回一个表示“那些值是NaN(不是一个数字)”的布尔类型数组sinan()

In [17]:
np.isnan(arr1)

Out[17]:
array([[False, False, False],
[False, False, False],
[False, False, False]])

分别一个表示”那些元素是有穷的(非inf、非NaN)”或者“那些元素是无穷的”的布尔型数组

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值