文档章节

numpy 介绍和基础使用详解

o
 osc_g8254g7s
发布于 2019/08/19 20:06
字数 1455
阅读 10
收藏 0

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

NUMPY INTRODUCTION

NUMPY 提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于处理多维数组,用于储存和处理大型矩阵,本身是由C语言开发,比python自身的列表结构要高效的多。

高性能科学计算和数据分析的基础包,总结:

NUMPY是一个Python科学计算基础库,提供了多维向量

NUMPY提供了用于数组快速操作的方法,数学,逻辑,排序,选择,线性代数,统计等

NUMPY采用预编译的C代码完成,效率更高

 

安装:
pip install numpy
使用:
import numpy as np
行业惯例将np作为numpy,将pd作为pandas。下文所有np均指的是numpy
 

认识轴:

 
轴【axis】:
 既然是多维数组,先理清一下轴,类似于我们学习的X、Y、Z

二维数组的轴:

                                       图一
 

三维数组的轴:

                                                    图二

使用NUMPY创建数组:

例:创建一个图一的数组
 
1 2 3
4 5 6

方法1:    np.array([])

a=np.array([[1,2,3],[4,5,6]])
 
b=np.array([range(1,4),range(4,7)])
 
c=np.array([[i for i in range(1,4)],[i for i in range(4,7)]]) 
[[1 2 3]
[4 5 6]]

方法2:    np.arange()

 
#1~6 步数为1
d=np.arange(1,7,1)
[1,2,3,4,5,6]
 
#将一维数组转变为二维
d=d.reshape(2,3)
[[1 2 3]
[4 5 6]]
 

常用属性和方法

形状

ndarray.shape   

 

重新改变数组形状

ndarray.reshape(x_dim, y_dim, z_dim,…)

 

数组的维度

ndarray.ndim  

 

itemsize输出array元素的字节数

numpy.itemsize

数组的形状:

nparray.shape:
#查看数组的形状维度
d=np.arange(1,7,1)
print(d.shape)
(6,)
nparray.reshape:
#改变数组的维度,规则1*6==2*3
d=d.reshape(2,3). #或者: d=np.reshape(d,(2,3))
print(d.shape)
(2, 3)
 
获取数组的维度,可使用len(nparray.shape),即元祖的维度,即 numpy.itemsize
 
将多维数组转换为一维数组方式:
自己动手:
def createOnenp(nparray):
    num=1
    for i in len(nparray.shape):
        num=num*nparray.shape[i]
    return nparray.reshape(num)
实际又是自己在造轮子,可使用np自带方法:
nparray= nparray.flatten()
a=np.array([[1,2,3],[4,5,6]])
print(a)
a=a.flatten()
print(a)
[[1 2 3]
[4 5 6]]
 
[1 2 3 4 5 6]
 

数组的计算:

情况一:数组和数值直接运算

a=np.array([i for i in range(1,7)])#生产一维数组
a=a.reshpe(2,3)
[[1 2 3]
[4 5 6]]
数组可以直接与数字进行四则运算(+、-、*、/)
即数组里的每一个值分别四则运算
print(a+2)
[[3 4 5]
[6 7 8]]
print(a/0)
[[inf inf inf]
[inf inf inf]]
在numpy中,/0并不会报错,
inf(infimum)表示无穷,
nan(not a number)代表未定义或不可表示的值,
 

情况二:数组与数组计算

这里要注意了,数组和数组的计算和矩阵是不同的
 
 
矩阵的乘积:
数组的乘积:
相同的多维数组或直接与单维度轴相同,可以直接四则运算:

方式:广播(broadcast

 
 
 
a:
[[1 2 3]
[4 5 6]]
print(a*a)
[[ 1  4  9]
[16 25 36]]
b:
[1 2 3]
print(a*b)
[[ 1  4  9]
[ 4 10 18]]
c:
[[1]
[2]]
print(a*c)
[[ 1  2  3]
[ 8 10 12]]
 
 

数组的操作:

1、转置操作

a=np.array([i for i in range(1,7)])#生产一维数组
a=a.reshpe(2,3)
[[1 2 3]
[4 5 6]]
  •     a.T
[[1 4]
[2 5]
[3 6]]
  • a.transpose()
[[1 4]
[2 5]
[3 6]]
  • a.swapaxes(1,0)    #交换0轴和1轴
[[1 4]
[2 5]
[3 6]]

2、切片

a=np.array([i for i in range(1,10)])#生产一维数组
a=a.reshpe(3,3)
[[1 2 3]
[4 5 6]
[7 8 9]]

2.1取行

2.1.1、取第x行  
print(a[x])
print(a[1])
[4 5 6]
2.1.2、取多行
print(a[[x,x]])
print(a[[0,2]])#取第一行和第三行
[[1 2 3]
[7 8 9]]
2.1.3、取连续多行
print(a[x:y:z]) #连续取从x行到y行,不包括y,间隔为z
print(a[0:3])#取第一行到第四行不包括第四行,也就是前面三行,和list切片类似,左闭右开
[[1 2 3]
[4 5 6]
[7 8 9]]
print(a[0:3:2])
[[1 2 3]
[7 8 9]]

2.2取列

和取行类似
a[:,x]#取x列
a[:,x:y]#取下标为x到下标为y-1的列
a[:,x:y:z]#取下标为x到下标为y-1,间隔为z的列
a[:,[x,y]] #取下标为x,y的两列

2.3取某一点

a[1,1]=a[1][1]
5

2.4取某一部分

print(a[1:3,1:3])
[[5 6]
[8 9]]
 

布尔索引、三元运算、裁剪

a=np.array([i for i in range(1,10)])#生产一维数组
a=a.reshpe(3,3)
[[1 2 3]
[4 5 6]
[7 8 9]]

布尔索引:

print(a>5)
[[False False False]
[False False  True]
[ True  True  True]]
print(a[a>5])
[6 7 8 9]
a[a>5]=5
print(a)
[[1 2 3]
[4 5 5]
[5 5 5]]

三元运算:

data1=np.where(a<5,1,9)#比5小的全部修改为1,其他的改为9
Print(data1)
[[1 1 1]
[1 9 9]
[9 9 9]]
 
裁剪
data2=a.clip(3,7)#小于3的替换为3,大于7的替换为7
print(data2)
[[3 3 3]
[4 5 6]
[7 7 7]]

常用的统计函数

求和:nparray.sum(axis=None)
均值:nparray.mean(axis=None) 受离群点的影响较大
中值:np.median(nparray,axis=None)
最大值:nparray.max(axis=None)
最小值:nparray.min(axis=None)
极值:np.ptp(nparray,axis=None) 即最大值和最小值只差
标准差:nparray.std(axis=None)
 

其他方法

获取最大值最小值的位置

 
  np.argmax(nparray,axis=0)
 
  np.argmin(nparray,axis=1)
 

创建一个全0的数组: np.zeros((3,3))

[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]

创建一个全1的数组: np.ones((3,3)) 

[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]

创建一个对角线为1的正方形数组(方阵):np.eye(3)

[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
 

 

 

NUMPY中的复制操作

a=b 完全不复制,a和b相互影响
 
a = b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的,
 
a = b.copy(),复制,a和b互不影响
 
 

等等用法:

numpy.sort()

numpy.amin()  numpy.amax()

numpy.mean()  numpy.average()  

numpy.std()  # sqrt(mean((x - x.mean())**2))

numpy.var()  # mean((x - x.mean())** 2) 

numpy.sin() cos() tan() pi arcsin(), arccos() arctan() degrees()

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
数据修炼之路目录

Numpy系列目录 Numpy系列(一)- n维数组 Numpy系列(二)- 数据类型 Numpy系列(三)- 基本运算操作 Numpy系列(四)- 索引和切片 Numpy系列(五)- 复制和视图 Numpy系列(六)- 形状操作 ...

osc_5y7u8lno
2019/04/10
1
0
「最全」实至名归,NumPy 官方早有中文教程,结合深度学习,还有防脱发指南

在 Github 上一度蝉联最流行的机器学习和数据科学包 NumPy,已经有了非常之系统的中文文档,回想起当初细啃 NumPy 之时,不少人不得不徘徊于各大搜索引擎及平台反复查找,找到的文档也许还很...

osc_x4ot1joy
03/23
14
0
「最全」实至名归,NumPy 官方早有中文教程,结合深度学习,还有防脱发指南

https://juejin.im/post/5e6ee31a6fb9a07cb346024f 在 Github 上一度蝉联最流行的机器学习和数据科学包 NumPy,已经有了非常之系统的中文文档,回想起当初细啃 NumPy 之时,不少人不得不徘徊...

osc_yumj26qz
03/19
1
0
「最全」实至名归,NumPy 官方早有中文教程,结合深度学习,还有防脱发指南

https://juejin.im/post/5e6ee31a6fb9a07cb346024f 在 Github 上一度蝉联最流行的机器学习和数据科学包 NumPy,已经有了非常之系统的中文文档,回想起当初细啃 NumPy 之时,不少人不得不徘徊...

osc_706v6usl
03/19
5
0
Numpy入门(一):Numpy的安装和创建

在数据分析和机器学习中,大量的使用科学计算,Numpy提供了大型矩阵计算的方式,而这些是python标准库中所缺少的。Numpy也是许多优秀的第三方库的基础,依赖于Numpy的库非常多,后续会慢慢的...

osc_zqfy88s7
2018/01/17
10
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周三乱弹 —— 公主是大王的,命是自己的。小怪也要养家糊口啊!

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @巴拉迪维 :郭燕的单曲《下半生》 最近听一些轻快的歌 #今日歌曲推荐# 《下半生》 - 郭燕 手机党少年们想听歌,请使劲儿戳(这里) @锦年 :...

小小编辑
17分钟前
7
0
Git不断提示我输入密码 - Git keeps prompting me for a password

问题: I've been using Git for a while now, but the constant requests for a password are starting to drive me up the wall. 我已经使用Git一段时间了,但是不断要求输入密码的人开始把......

fyin1314
26分钟前
12
0
未捕获ReferenceError:未定义$? - Uncaught ReferenceError: $ is not defined?

问题: How come this code throws an 此代码如何引发 Uncaught ReferenceError: $ is not defined 未捕获的ReferenceError:未定义$ when it was OK before? 以前什么时候可以? $(document......

javail
56分钟前
12
0
263. Ugly Number

题目: 263. Ugly Number 题目地址:https://leetcode.com/problems/ugly-number/ Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers......

JiaMing
今天
60
0
HCIA_ARP01

ARP(地址解析协议) eNSP 常用路由器:AR2220 常用交换机:S5700、S3700 常用终端:PC、MCS(主播服务器) 设备连线:Copper(以太网用到的双绞线)、Serial(串口线,2SA接口)、Auto(自动连...

创业789
今天
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部