Numerical Python,即数值Python包,是Python进行科学计算的一个基础包,所以是一个掌握其他Scipy库中模块的基础模块,一定需要先掌握该包的主要使用方式。
NumPy模块是Python的一种开源的数值计算扩展,是一个用python实现的科学计算包,主要包括:
其中,numpy有一个核心的数据结构,叫做ndarray
。
下面再了解一下ndarray
的基本特征。
可以通过numpy模块中的常用的几个函数进行创建ndarray多维数组对象,主要函数如下:
array对象的定义:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
上面的构造器接受以下参数:
序号 | 参数及描述 |
---|---|
1. object | 任何暴露数组接口方法的对象都会返回一个数组或任何(嵌套)序列。 |
2. dtype | 数组的所需数据类型,可选。 |
3. copy | 可选,默认为true,对象是否被复制。 |
4. order | C(按行)、F(按列)或A(任意,默认)。 |
5. subok | 默认情况下,返回的数组被强制为基类数组。 如果为true,则返回子类。 |
6. ndimin | 指定返回数组的最小维数。 |
看了这么多定义,下面看看具体的实例吧。
import numpy as np
#例子01
a = np.array([1,2,3,4,5])
print(a)
print(type(a))
输出:[1 2 3]
a2 = np.array([[1,2],[3,4]])
print(a2)
输出:
[[1 2]
[3 4]]
#最小维度
a3 = np.array([1,2,3,4,5],ndmin = 3)
print(a3)
输出
[[[1 2 3 4 5]]]
ndmin这个参数的意思是,不管你给的数据的维度是多少,我总是会创建给出的最小的维度,比如这里ndmin=3,虽然给出的数据是一位的,但是也会创建一个三维的处理。
构造器接受下列参数:
序号 | 参数及描述 |
---|---|
1. Shape | 空数组的形状,整数或整数元组 |
2. Dtype | 所需的输出数组类型,可选 |
3. Order | 'C’为按行的 C 风格数组,'F’为按列的 Fortran 风格数组 |
举例:
#数组元素为随机值:创建一个4*4的的矩阵,数据为随机
arr = np.empty((4,4),dtype = 'i1')
print(arr)
输出:
[[ 1 0 0 0]
[ 0 0 0 0]
[ 48 6 50 38]
[ -7 127 0 0]]
#例
arr = np.zeros((3,3))
print(arr)
# 自定义类型
arr = np.zeros((3,3), dtype = [('x', 'i2'), ('y', 'i2')])
print(arr)
arr = np.ones((2,3,4))
print(arr)
arr = np.ones((3,3), dtype = [('x', 'i4'), ('y', 'i4')])
print(arr)
输出:
[[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]]
[[(1, 1) (1, 1) (1, 1)]
[(1, 1) (1, 1) (1, 1)]
[(1, 1) (1, 1) (1, 1)]]
这些主要是通过列表,元祖,元祖列表来创建的方式。
#来自列表
arr = [1,2,3,4]
arr2 = np.asarray(arr)
print(arr2)
print(type(arr))
print(type(arr2))
输出:
[1 2 3 4]
#来自元组
arr = (1,2,3,4)
arr2 = np.asarray(arr)
print(arr2)
print(type(arr))
print(type(arr2))
#来自元组列表
arr = [(1,2,3,4),(5,6,7,8)]
arr2 = np.asarray(arr)
print(arr2)
print(type(arr))
print(type(arr2))
arange函数: 类似python的range函数,通过指定开始值、终值和步长来创建一个一维数组,注意:最终创建的数组不包含终值
linspace函数:通过指定开始值、终值和元素个数来创建一个一维数组,数组的数据元素符合等差数列,可以通过endpoint关键字指定是否包含终值,默认包含终值
logspace函数:和linspace函数类似,不过创建的是等比数列数组
使用随机数填充数组,即使用numpy.random中的random()函数来创建0-1之间的随机元素,数组包含的元素数量由参数决定
numpy.arange
这个函数返回ndarray对象,包含给定范围内的等间隔值
numpy.arange(start,stop,step,dtype)
arr = np.arange(1,20,5,dtype = float)
print(arr)
输出:
[ 1. 6. 11. 16.]
start | 起始值 |
---|---|
stop | 结束值 |
num | 生成等间隔样例的数量,默认为50 |
endpoint | 序列中是否包含stop 值 默认为 True |
arr = np.linspace(10,20,9)
print(arr)
arr = np.linspace(10,20,5,endpoint=False)
print(arr)
arr = np.linspace(10,20,5,retstep=True)
print(arr) #返回步长
输出:
[10. 11.25 12.5 13.75 15. 16.25 17.5 18.75 20. ]
[10. 12. 14. 16. 18.]
(array([10. , 12.5, 15. , 17.5, 20. ]), 2.5)
1. start | 起始值是base ** start |
---|---|
2. stop | 终止值是base ** stop |
3. num | 范围内的数值数量,默认为50 |
4. endpoint | 如果为true,终止值包含在输出数组当中 |
5. base | 对数空间的底数,默认为10 |
6. dtype | 输出数组的数据类型,如果没有提供,则取决于其它参数 |
arr = np.logspace(1,10,10,base = 2)
print(arr)
输出:
[ 2. 4. 8. 16. 32. 64. 128. 256. 512. 1024.]
arr = np.random.rand(9).reshape(3,3)
print(arr)
arr = np.random.rand(3,2,3)
print(arr)
arr = np.random.randn(9).reshape(3,3)
print(arr)
arr = np.random.randn(3,2,3)
print(arr)
arr = np.random.randint(1,9,size = (2,4))
print(arr)
arr = np.random.random_integers(1,9,size =(2,4))
print(arr)
arr = np.random.random((3,2,3))
print(arr)
arr = np.random.randn(3,2,3)
print(arr)