numpy有什么功能python_Numpy的介绍与基本使⽤⽅法
1、什么是Numpy
NumPy是⼀个功能强⼤的Python库,主要⽤于对多维数组执⾏计算。NumPy这个词来源于两个单词-- Numerical和Python。
它是 Python ⽣态系统中数据分析、机器学习和科学计算的主⼒军。它极⼤地简化了向量和矩阵的操作处理。Python 数据科学相关的⼀些主要软件包(如 scikit-learn、SciPy、pandas 和 tensorflow)都以 NumPy 作为其架构的基础部分。除了能对数值数据进⾏切⽚(slice)和切块(dice)之外,使⽤ NumPy 还能为处理和调试上述库中的⾼级实例带来极⼤便利组。它将常⽤的数学函数都⽀持向量化运算,使得这些数学函数能够直接对数组进⾏操作,将本来需要在Python级别进⾏的循环,放到C语⾔的运算中,明显地提⾼了程序的运算速度。
2、为什么要⽤Numpy
NumPy是Python中的⼀个运算速度⾮常快的⼀个数学库,它⾮常重视数组。它允许你在Python中进⾏向量和矩阵计算,并且由于许多底层函数实际上是⽤C编写的,因此你可以体验在原⽣Python中永远⽆法体验到的速度。
import numpy as np
import time
# ⽤python⾃带⽅法处理
def func(values):
result = []
for v in values:
result.append(v * v)
return result
data = range(10000)
%timeit func(data)
运⾏结果:
1.07 ms ± 20.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
# ⽤numpy中的⽅法处理
arr = np.arange(0,10000)
%timeit arr ** arr
运⾏结果:
397 µs ± 32.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
NumPy绝对是科学Python成功的关键之⼀,如果你想要进⼊Python中的数据科学或机器学习,你就要必须学习它。从最后的执⾏结果来看numpy的处理速度要⽐python的处理速度快上⼗⼏倍,当然这只是它的其中⼀项优势,下⾯就通过⼀些具体的操作来看⼀看numpy的⽤法与优势。
3、怎么⽤Numpy
安装⽅法:
pip install numpy
引⽤⽅式:
import numpy as np
这是官⽅认证的导⼊⽅式,可能会有⼈说为什么不⽤from numpy import *,是因为在numpy当中有⼀些⽅法与Python中⾃带的⼀些⽅法,例如max、min等冲突,为了避免这些⿇烦⼤家就约定俗成的都使⽤这种⽅法。
Numpy的核⼼特征就是N-维数组对——ndarray.
3.1、为什么要⽤ndarray?
numpy所有的操作都是围绕着数组展开的,这个数组的名字就叫做ndarray,在学习ndarray数组之前肯定有⼈会说这个东西和Python中的列表差不多啊,为什么不⽤列表呢,列表还要⽅便些。其实列表list本⾝是为了处理更⼴泛、更通⽤的⽬的⽽构建的,其实从这⼀⽅⾯来看ndarray对于处理这个数组类型结构的数据会更加⽅便。
接下来我们可以通过具体的实例来展⽰⼀下ndarray的优势。
现在有这样⼀个需求:
已知若⼲家跨国公司的市值(美元),将其换算为⼈民币
按照Python当中的⽅法
第⼀种:是将所有的美元通过for循环依次迭代出来,然后⽤每个公司的市值乘以汇率
第⼆种:通过map⽅法和lambda函数映射
这些⽅法相对来说也挺好⽤的,但是再来看通过ndarray对象是如何计算的
通过ndarray这个多维数组对象可以让这些批量计算变得更加简单,当然这只它其中⼀种优势,接下来就通过具体的操作来发现。
3.2、ndarray-创建
⽅法
描述
array()
将列表转换为数组,可选择显式指定dtype
arange()
range的numpy版,⽀持浮点数
linspace()
类似arange(),第三个参数为数组长度
zeros()
根据指定形状和dtype创建全0数组
ones()
根据指定形状和dtype创建全1数组
empty()
根据指定形状和dtype创建空数组(随机值)
eye()
根据指定边长和dtype创建单位矩阵
1、arange():linspace函数python
np.arange(1.2,10,0.4)
执⾏结果:
array([1.2, 1.6, 2. , 2.4, 2.8, 3.2, 3.6, 4. , 4.4, 4.8, 5.2, 5.6, 6. ,
6.4, 6.8,
7.2, 7.6,
8. , 8.4, 8.8,
9.2, 9.6])
# 在进⾏数据分析的时候通常我们遇到⼩数的机会远远⼤于遇到整数的机会,这个⽅法与Python内置的range的使⽤⽅法⼀样
-----------------------------------------------------------------
2、linspace()
np.linspace(1,10,20)
执⾏结果:
array([ 1. , 1.47368421, 1.94736842, 2.42105263, 2.89473684,
3.36842105, 3.84210526,
4.31578947, 4.78947368,
5.26315789,
5.73684211,
6.21052632, 6.68421053,
7.15789474, 7.63157895,
8.10526316, 8.57894737, 9.05263158, 9.52631579, 10. ])
# 这个⽅法与arange有⼀些区别,arange是顾头不顾尾,⽽这个⽅法是顾头⼜顾尾,在1到10之间⽣成的⼆⼗个数每个数字之间的距离相等的,前后两个数做减法肯定相等
----------------------------------------------------------------
3、zeros()
执⾏结果:
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
# 会⽤0⽣成三⾏四列的⼀个多维数组
---------------------------------------------------------------------
4、ones()
执⾏结果:
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
# 会⽤1⽣成三⾏四列的⼀个多维数组
------------------------------------------------------------------------
5、empty()
执⾏结果:
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
# 这个⽅法只申请内存,不给它赋值
-----------------------------------------------------------------------
6、eye()
<(5)
执⾏结果:
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
# 对⾓矩阵
3.3、ndarray是⼀个多维数组列表
接下来就多维数组举个例⼦:
为了创建⼀个2维数组,我们是传递了⼀个列表的列表给这个array()函数。如果我们想要的是⼀个三维数组,我们就必须要⼀个列表的列表的列表(也就是三层列表),以此类推。
很多情况下,处理⼀个新的维度只需要在numpy函数的参数中添加⼀个逗号
有的⼈可能会说了,这个数组跟Python中的列表很像啊,它和列表有什么区别呢?
'''
在python中列表是可以存任意类型的值的,但是在数组当中的元素必须类型必须相同。这是因为列表中存的只是每个元素的地址,不管运⾏多少次,值的位置是不会改变的,不需要在意数据的类型;⽽在ndarray当中存的是具体的值,每⼀次执⾏都是重新存放。
'''
l1 = ['1','2',4]
na = np.array(l1)
print(f"ndarry:{id(na[0])}")
print(f"list:{id(l1[0])}")
> ndarry:2140960887632
list:2140897577592
"""
通过多次执⾏其实就可以发现,ndarray数组的id值⼀直在不停的换,⽽list的id值始终保持不变
"""
数组对象内的元素类型必须相同
数组⼤⼩不可修改
3.4、常⽤属性
属性
描述
T
数组的转置(对⾼维数组⽽⾔)
dtype
数组元素的数据类型
size
数组元素的个数
ndim
数组的维数
shape
数组的维度⼤⼩(以元组形式)
itemsize
每个项占⽤的字节数
nbytes
数组中的所有数据消耗掉的字节数
# T:转置 转置是⼀种特殊的数据重组形式,可以返回底层数据的视图⽽不需要复制任何内容。# 通俗点说,转置就是将数据旋转90度,⾏变成列,列变成⾏。
li1 = [
[1,2,3],
[4,5,6]
]
a = np.array(li1)
a.T
执⾏结果:
array([[1, 4],
[2, 5],
[3, 6]])
# dtype:返回当前数据的数据类型
arr = np.arange(10)
arr.dtype
执⾏结果:
dtype('int32')
# size:返回当前数组内存在的元素个数
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论