您的位置 首页 杂谈

入门numpy(上)【解读numpy官方文档】

山东私人保镖公司,与狼共舞oa,一家天下

前言 之前连载了pandas,pandas作为python做数据分析的一大利器,相信大家都不陌生。 当然连载部分作为入门是够了,具体提升还要大家多看看官方文档详细内容和做具体项目案…

前言

之前连载了pandas,pandas作为python做数据分析的一大利器,相信大家都不陌生。

当然连载部分作为入门是够了,具体提升还要大家多看看官方文档详细内容和做具体项目案例

之后我也会出一些pandas的数据分析实战案例分享给大家。

在询问了大家的意见和建议(怎么说的这么官方,不是我的风格啊)之后

我决定解读一下numpy的官方文档(入门部分)

让大家能够快速上手numpy

首先,我们看看官方是怎么介绍numpy的:

”’

NumPy是使用Python进行科学计算的基础软件包。 它包含以下内容:

(1)一个强大的N维数组对象

(2)复杂(广播)功能

(3)用于集成C / C 和Fortran代码的工具

(4)非常有用的线性代数,傅里叶变换和随机数操作

(5)除了其明显的科学用途,NumPy也可以用作通用数据的高效多维容器。 可以定义任意数据类型。 这使NumPy能够无缝地,快速地与各种数据库集成。

”’

可能大家对’广播’一词不太了解,广播的意思可以这样理解,当我有两个维度不一样的array(数组)运算时,我可以用低维的数组复制成高维数组参与运算(因为运算要符合一定结构)

numpy官方网站:http://www.numpy.org/

开始numpy之旅

如果你是一个python初学者,我不建议你直接去python官网下载python3.X或是python2.7版本

我推荐你直接去anaconda官网下载对应版本的anaconda(建议下载最新的3.X版本)

下载地址:

https://www.continuum.io/downloads

如果你是windows用户,直接进入官网下载下图的即可


为什么推荐anaconda呢?

因为anaconda是python的集成环境,自带了很多python的库(或者认为是包)

举个栗子:

如果Python是一个光杆司令的话,anaconda则是一个司令带着一堆军队

so,你应该知道为什么我推荐你装anaconda了吧

如果你已经装了原生python并且用了挺久,也pip install 了很多库,类似numpy,scipy,pandas

那么你一定遇到很多报错,恭喜你,你已经才过了很多坑啦~就像我一样

有趣的是:

python是巨蟒的意思

anaconda是水蟒的意思

如果你在pip install numpy中由于网速慢安装报错,你可以来这里下载然后本地安装numpy

https://pypi.python.org/pypi/numpy#downloads

numpy快速入门官方文档:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

环境

python3.X

一颗栗子

import numpy as np

如果没报错,恭喜你,numpy安装完成

这里是把numpy命名为np

可以说是行业潜规则,当然是为了之后写代码简写方便

a = np.arange(15).reshape(3, 5)
a


注:这里的array(数组)是numpy中特有的类型,首先,使用np.arange(15)产生了一个一维数组,从0-14(注意范围)

arange不是arrange,arange是numpy的方法,所以写为np.arange()

然后,使用reshape()方法将这个产生的数组重新造型为3行5列的二维数组,也就有了上图的样子。

a.shape


注:查看数组格式,显示三行五列

a.ndim


注:显示数组的维数

如果你想知道这个方法的含义,可以在jupyter notebook (装完anaconda自带的ide编辑器)里输入:

?np.dim


还有举例子帮你理解呢~

a.dtype.name


注:a数组中的数值类型

a.itemsize


注:每个数组元素的字节大小

a.size


注:a数组中的元素个数

type(a)


注:a的类型

b = np.array()
b


注:当然,你可以直接通过直接赋值创建一个数组

type(b)


创建数组

使用array方法直接通过list(列表)创建数组

import numpy as np
a = np.array()
a


a.dtype


b = np.array()b.dtype


注:可以创建整形和浮点型元素的数组

常见错误:没有经过list直接用数列创建数组


b = np.array()
b


注:创建二维数组

当然,创建数组的时候,也可以指明类型:

c = np.array( , ], dtype=complex )
c


注:这里指定的是复数类型

np.zeros( (3,4) )


注:创建全零数组,默认为float64形式

np.ones( (2,3,4), dtype=np.int16 )


注:创建一个三维全1的数组,并且创建时指定类型

你可以认为是一个长方体里有序的充满了1

观察括号,有层次的

np.empty( (2,3) )


注:创建一个二维的空数组,电脑不同导致显示不同

使用arange创建array

np.arange( 10, 30, 5 )


注:产生一个起始值为10,终止值为30(注意,终止值取不到),步长为5的数组

有点像c语言中的for循环格式

np.arange( 0, 2, 0.3 )


注:这里想说它接受float的值,不仅仅是int类型的值

当使用浮点参数时,由于有限的浮点精度,通常不可能预测获得的元素的数量。

因此,通常最好使用函数linspace来接收我们想要的元素的数量作为参数,而不是使用步长参数:

from numpy import pinp.linspace( 0, 2, 9 )


注:产生0到2之间等间距(步长)的9个元素的数组,linspace和matlab中的用法一样

x = np.linspace( 0, 2*pi, 100 )
f = np.sin(x)
f

注:在之前import了pi(π),现在相当于在0~2pi之间产生100个均匀的数字作为x

然后通过sin(x)算出对应的y,部分结果如下:


更详细的操作可以在这里看:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

就是下图这里,链接太多,就不一个个弄出来了


显示数组

a = np.arange(6)
print(a)


注:打印一维数组

b = np.arange(12).reshape(4,3)
print(b)


注:打印二维数组

c = np.arange(24).reshape(2,3,4)
print(c)


注:打印三维数组

更多reshape方法可以看这里:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html#quickstart-shape-manipulation

如果数组太大而无法全部打印,NumPy会自动跳过中央部分,只能打印出边界部分(首尾):

print(np.arange(10000))


print(np.arange(10000).reshape(100,100))


要禁用此省略并强制NumPy打印整个数组,您可以使用set_printoptions更改打印选项。

np.set_printoptions(threshold='nan')

基本操作

a = np.array( )
b = np.arange( 4 )
b


c = a-b
c


注:数组相减

b**2


注:b数组中每个元素平方

10*np.sin(a)


注:a数组先进行sin运算,然后结果乘10

a35


注:对a数组中每个元素和35进行比较大小,返回的是一个充满布尔元素的数组

数组的矩阵乘法和对应元素乘积方法:

原理参考线性代数

A = np.array( ,
] )
B = np.array( ,
] )

注:创建两个数组(矩阵)

A*B


注:对应元素相乘

A.dot(B)


注:A左乘B,也可以写成如下形式:

np.dot(A, B)

结果一样的

A左乘B 和 B左乘A是不一样的,详见线性代数课本

某些操作(例如 =和* =)将作用于修改现有数组而不是创建新的数组:

a = np.ones((2,3), dtype=int)
b = np.random.random((2,3))
a *= 3
a


注:创建一个2行3列全是元素1的数组a,然后将a的元素都乘3

小插曲:

(1)

num = 1
num = num 1
num

(2)

num = 1
num = 1
num

初学者可以认为以上两种一样的意思,其实不一样,等你自己慢慢去挖掘。

同理以下也是:

num -= 1
num *= 1
num /= 1

回到正题:

b = a
b

相当于b = b a


注:这里要说的是以上操作是修改现有数组而不是创建新的数组!!!

所以有时候尽量先备份一个

易错点:


这里a是int类型,b是float类型:


运算时,一般是可以默认自动从int到float转换(从简单到复杂)

而你的a = a b相当于将float转为int,所以报错了

未完待续~近期更新~谢谢观赏~希望对你学习有帮助~

关注公众号,“Python爱好者社区”,回复“爬虫”即可获取崔老师爬虫免费学习视频。

Python爱好者社区

为大家提供与Python相关的最新技术和资讯。

本文来自网络,不代表加推新闻网立场,转载请注明出处:http://www.bafangmiaomu.com/shehui/97755/

作者: 头条新闻

为您推荐