目录
概述
Numpy 数组类型
Numpy初探
Numpy数组生成
列表或元组转换
arange方法创建
linspace方法创建
ones方法创建
zeros方法创建
eye方法创建
从已知数据创建
ndarray数组属性
Numpy是支持python语言的数值计算扩充库,其拥有强大的多维数组处理能力与矩阵运算能力。除此之外,Numpy还内建了大量的函数,方便快速构建数学模型。
主要内容:
数值类型及多维数组
数组操作及随机抽样
数学函数及代数运算
数组索引及其他用法
Numpy支持的数值类型细分如下:
在 NumPy 中,上面的这些数值类型都被归于 `dtype(data-type)` 对象的实例。
我们可以用 `numpy.dtype(object, align, copy)` 来指定数值类型。而在数组里面,可以用 `dtype=` 参数。
1,创建一维数组,并指定数据类型
import numpy as np # 导入 NumPy 模块
a = np.array([1.1, 2.2, 3.3], dtype=np.float64) # 指定 1 维数组的数值类型为 float64
# 查看 a 及 dtype 类型
print(a,a.dtype)
运行结果:
2,使用.astype()方法在不同的数值类型之间相互转换
a.astype(int).dtype # 将 a 的数值类型从 float64 转换为 int,并查看 dtype 类型
print(a.dtype)
运行结果:
Numpy最核心、最重要的一个特性就是ndarray多维数组对象,拥有对高数组的处理能力
Numpy中,ndarray类具有六个参数,分别为:
1、shape:数组的形状
2、dtype:数据类型
3、buffer:对象暴露缓冲区接口
4、offset:数组数据的偏移量
5、strides:数据步长
6、order:{'C','F'},以行或列为主排序顺序
在Numpy中,主要通过以下几种途径创建数组,它们分别是:
1、从python数组结构列表,元组等转换
2、使用np.arange\np.ones\np.zeros等Numpy原生方法
3、从存储空间读取数据
4、通过使用字符串或者缓冲区从原始字节创建数组
在Numpy中,使用numpy.array将列表或者元组转换为ndarray数组。方法为:
numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
其中的参数:
object
:列表、元组等。 dtype
:数据类型。如果未给出,则类型为被保存对象所需的最小类型。copy
:布尔类型,默认 True,表示复制对象。order
:顺序。subok
:布尔类型,表示子类是否被传递。ndmin
:生成的数组应具有的最小维数。通过列表创建一个ndarray数组
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
运行结果:
[[1 2 3]
[4 5 6]]
通过元组创建一个ndarray数组
b = np.array([(1, 2), (3, 4), (5, 6)])
print(b)
运行结果:
[[1 2]
[3 4]
[5 6]]
arange()的功能是在给定区间内创建一系列均匀间隔的值,方法如下:
numpy.arange(start, stop, step, dtype=None)
参数设置为值所在的区间[开始,停止),这是一个半开半闭区间,然后设置步长用于设置值之间的间隔。最后选择dtype可以返回ndarray的值类型。
实例
# 在区间 [3, 7) 中以 0.5 为步长新建数组
a = np.arange(3, 7, 0.5, dtype='float32')
print(a,a.dtype)
运行结果:
[3. 3.5 4. 4.5 5. 5.5 6. 6.5] float32
linspace用于在指定的区间内返回间隔均匀的值,方法如下:
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数为:
start
:序列的起始值。stop
:序列的结束值。num
:生成的样本数。默认值为50。endpoint
:布尔值,如果为真,则最后一个样本包含在序列内。retstep
:布尔值,如果为真,返回间距。dtype
:数组的类型。实例
a = np.linspace(0, 10, 10, endpoint=True)
print(a)
运行结果:
[ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556
6.66666667 7.77777778 8.88888889 10. ]
若将endpoint参数改成False
a = np.linspace(0, 10, 10, endpoint=False)
print(a)
运行结果:
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
numpy.ones用于快速创建数值全部为1的多维数组,方法如下:
numpy.ones(shape, dtype=None, order='C')
参数为:
shape
:用于指定数组形状,例如(1, 2)或 3。dtype
:数据类型。order
:{'C','F'}
,按行或列方式储存数组。实例
a = np.ones((2, 3))
print(a)
运行结果:
[[1. 1. 1.]
[1. 1. 1.]]
zeros方法和ones方法非常相似,不同的地方在于,这里全部填充为0,zeros方法和ones方法是一致的
numpy.zeros(shape, dtype=None, order='C')
参数:
shape
:用于指定数组形状,例如(1, 2)
或3
。dtype
:数据类型。order
:{'C','F'}
,按行或列方式储存数组。实例
a = np.zeros((3, 2))
print(a)
运行结果:
[[0. 0.]
[0. 0.]
[0. 0.]]
numpy.eye用于创建一个二维数组,其特点是K对角线上的值为1,其余值全部为0。方法如下:
numpy.eye(N, M=None, k=0, dtype=)
参数:
N
:输出数组的行数。M
:输出数组的列数。k
:对角线索引:0(默认)是指主对角线,正值是指上对角线,负值是指下对角线。实例
a = np.eye(5, 4, 3)
print(a)
运行结果
[[0. 0. 0. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
Numpy提供了下面5个方法
frombuffer(buffer)
:将缓冲区转换为 1
维数组。fromfile(file,dtype,count,sep)
:从文本或二进制文件中构建多维数组。fromfunction(function,shape)
:通过函数返回值来创建多维数组。fromiter(iterable,dtype,count)
:从可迭代对象创建 1
维数组。fromstring(string,dtype,count,sep)
:从字符串中创建 1
维数组。实例
a = np.fromfunction(lambda a, b: a + b, (5, 4))
print(a)
运行结果:
[[0. 1. 2. 3.]
[1. 2. 3. 4.]
[2. 3. 4. 5.]
[3. 4. 5. 6.]
[4. 5. 6. 7.]]
创建一个二维数组并赋值
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(a) # 查看 a 的值
运行结果
[[1 2 3]
[4 5 6]
[7 8 9]]
ndarray.T用于数组的转置,与.transpase()相同
b = a.T
print(b)
运行结果
[[1 4 7]
[2 5 8]
[3 6 9]]
ndarray.dtype用来输出数组包含元素的数据类型
print(b.dtype)
运行结果
int64
ndarray.imag用于输出数组包含元素的虚部
print(b.imag)
运行结果
[[0 0 0]
[0 0 0]
[0 0 0]]
ndarray.real用来输出数组包含元素的实部
print(b.real)
运行结果
[[1 4 7]
[2 5 8]
[3 6 9]]
ndarray.size用来输出数组中的总包含元素数
print(b.size)
运行结果
9
ndarray.itemsize输出一个数组元素的字节数
print(b.itemsize)
运行结果:
8
ndarray.nbytes用来输出数组的元素总字节数
print(b.nbytes)
运行结果
72
ndarray.ndim用来输出数组尺寸
print(b.ndim)
运行结果
2
ndarray.shape用来输出数组维数组
print(b.shape)
运行结果
(3, 3)
ndarray.strides用来遍历数组时,输出每个维度中步进的字节数组
print(b.strides)
运行结果
(8, 24)
Numpy数组又被称为ndarray多维数组,那么n就可以从1维一次递增,如下图的1至3维的Nnmpy数组示例。
1维数组可以被看作数学中的向量,2维数组可以看作是矩阵,而3维数组则是一个数据立方
实例
one = np.array([7, 2, 9, 10])
two = np.array([[5.2, 3.0, 4.5],
[9.1, 0.1, 0.3]])
three = np.array([[[1, 1], [1, 1], [1, 1]],
[[1, 1], [1, 1], [1, 1]],
[[1, 1], [1, 1], [1, 1]],
[[1, 1], [1, 1], [1, 1]]])
print(one.shape,two.shape,three.shape)
运行结果
(4,) (2, 3) (4, 3, 2)
reshape可以在不改变数组数据的同时,改变数组的形状。其中numpy.shape()等效于ndarray.reshape()
numpy.reshape(a, newshape)
其中参数a表示原数组,newshape用于指定新的形状(整数或者元组)
a = np.arange(10).reshape((5, 2))
print(a)
运行结果
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
ravel的目的是将任意形状的数组扁平化,变为1维数组,ravel方法如下:
numpy.ravel(a, order='C')
其中,a 表示需要处理的数组。order
表示变换时的读取顺序,默认是按照行依次读取,当 order='F'
时,可以按列依次读取排序。
a = np.arange(10).reshape((2, 5))
print(a)
b = np.ravel(a)
print(b)
c = np.ravel(a, order='F')
print(c)
运行结果
[[0 1 2 3 4]
[5 6 7 8 9]]
[0 1 2 3 4 5 6 7 8 9]
[0 5 1 6 2 7 3 8 4 9]
未完待续~