前言
Numpy 是 Python 专门处理高维数组计算的包。直接pip install numpy进行安装,或者安装Anaconda,其中含有大量的机器学习和数据相关的Python模块。如果在安装或者学习过程中出现什么问题的话可以进入Numpy官网查看相关信息。在使用Numpy库之前首先我们要引用它:
import numpy as np
因为每次使用Numpy中的方法或函数都要写numpy字数有点多,所以我们可以用np作为别名。
之所以要额外引入数组这一种数据结构在于它的计算效率非常高。下面是对数组和列表每个元素进行平方的运算速度对比:
先随机生成大小为10000000的数组和列表:
Array = np.arange(10000000)
List = list(range(10000000))
然后分别对其中的每个元素进行平方处理:
start1 = t.perf_counter()
Array = Array ** 2
end1 = t.perf_counter()
print("数组平方用时为{:4f}s".format(end1 - start1))
start2 = t.perf_counter()
for i in List:
i = i ** 2
end2 = t.perf_counter()
print("列表平方用时为{:4f}s".format(end2 - start2))
得到结果:
数组平方用时为0.021923s
列表平方用时为2.955364s
所以我们可以看出二者的运算速度相差了上百倍,所以numpy数组显然更适合做数值运算。
一、ndarray数组对象
1、数组的初步认识
NumPy 最重要的一个特点是其 n 维数组对象 ndarray,它是一系列同类型数据的集合所组成数据结构,以 0 下标为开始进行集合中元素的索引。ndarray 数组中的元素用的最多是数值型元素,平时我们说的一维、二维、三维数组长下面这个样子 (对应着线、面、体)。
axis,中文叫轴,一个数组是多少维度就有多少根轴。 Python 计数都是从 0 开始的,如下图:
2、数组的创建
(1)由python中的列表和元组等数据类型创建
这种方法主要用到np.array()函数,参数里面是元组或者列表都可以:
a = np.array([[2,3,4,7,5],[4,8,5,7,2]])
b = np.array(((1,2,5,3,7),(3,7,2,9,5)))
print("a=\n{}\n".format(a))
print("b=\n{}\n".format(b))
a=
[[2 3 4 7 5]
[4 8 5 7 2]]
b=
[[1 2 5 3 7]
[3 7 2 9 5]]
元组或列表混着来也可以:
c = np.array([(1,3,7,5,2),[2,7,4,9,6]])
print("c=\n{}\n".format(c))
c=
[[1 3 7 5 2]
[2 7 4 9 6]]
(2)定隔定点创建
这种创建方式一共有两种函数:
- np.arange():固定元素大小间隔
- np.linspace():固定元素个数
np.arange()函数的定义如下:
numpy.arange(start, stop, step, dtype)
参数说明:
参数 | 说明 |
---|---|
start | 起始值,默认为0 |
stop | 终止值(不能为空且不包括) |
step | 步长,默认为1 |
dtype | 返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。 |
下面是具体例子:
d1 = np.arange(5)
d2 = np.arange(2,5)
d3 = np.arange(2,8,2)
print("d1=\n{}\n".format(d1))
print("d2=\n{}\n".format(d2))
print("d3=\n{}\n".format(d3))
d1=
[0 1 2 3 4]
d2=
[2 3 4]
d3=
[2 4 6 8]
np.linspace()函数的定义如下:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数说明:
参数 | 说明 |
---|---|
start | 序列的起始值 |
stop | 序列的终止值,如果endpoint为true,该值包含于数列中 |
num | 要生成的等步长的样本数量,默认为50 |
endpoint | 该值为 true 时,数列中包含stop值,反之不包含,默认是True。 |
retstep | 如果为 True 时,生成的数组中会显示间距,反之不显示。 |
dtype | 返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。 |
下面是具体例子:
d4 = np.linspace(1,100,8)
d5 = np.linspace(1,100,8,endpoint=False)
print("d4=\n{}\n".format(d4))
print("d5=\n{}\n".format(d5))
d4=
[ 1. 15.14285714 29.28571429 43.42857143 57.57142857 71.71428571 85.85714286 100. ]
d5=
[ 1. 13.375 25.75 38.125 50.5