目录
NumPy介绍:
NumPy 安装:
NumPy Ndarray 对象 :
实例:
数据类型对象 (dtype)
数据类型对象(numpy.dtype 类的实例)
数组
数组属性
ndarray.ndim
ndarray.itemsize
NumPy 创建数组
NumPy 从已有的数组创建数组
NumPy 从数值范围创建数组
NumPy 切片和索引
Numpy 数组操作
修改数组形状
翻转数组
是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
pip3 install --user numpy scipy matplotlib
pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
# 导入 numpy 库。
from numpy as np
eye(4)
# 输出
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
ndarray 对象是用于存放同类型元素的多维数组。
ndarray 中的每个元素在内存中都有相同存储大小的区域。
ndarray 内部由以下内容组成:
一个指向数据(内存或内存映射文件中的一块数据)的指针。
数据类型或 dtype,描述在数组中的固定大小值的格子。
一个表示数组形状(shape)的元组,表示各维度大小的元组。
一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。
# 实例1
import numpy as np
# 通过列表创建一维数组
a = np.array([1,2,3])
print (a)
# 结果
[1 2 3]
# 实例2,多于一个维度
import numpy as np
a = np.array([[1, 2], [3, 4]])
print (a)
# 结果
[[1 2]
[3 4]]
ndmin:设置最小维度:结果矩阵显示的维度会按照ndmin中的设置
# 最小维度
import numpy as np
a = np.array([1, 2, 3, 4, 5], ndmin = 2)
print (a)
# 结果
[[1 2 3 4 5]]
用来描述与数组对应的内存区域是如何使用
numpy.dtype(object, align, copy)
# object - 要转换为的数据类型对象
# align - 如果为 true,填充字段使其类似 C 的结构体。
# copy - 复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用
实例
import numpy as np
# 使用标量类型
dt = np.dtype(np.int32)
print(dt)
# 结果
int32
NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量---秩,就是数组的维数。
ndarray.ndim
import numpy as np
a = np.arange(24)
print (a.ndim) # a 现只有一个维度
# 现在调整其大小
b = a.reshape(2,4,3) # b 现在拥有三个维度
print (b.ndim)
# 结果
1
3
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print (a.shape)
# 结果
(2, 3)
ndarray.itemsize
import numpy as np
# 数组的 dtype 为 int8(一个字节)
x = np.array([1,2,3,4,5], dtype = np.int8)
print (x.itemsize)
# 数组的 dtype 现在为 float64(八个字节)
y = np.array([1,2,3,4,5], dtype = np.float64)
print (y.itemsize)
# 结果
1
8
numpy.empty
numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组
import numpy as np
x = np.empty([3,2], dtype = int)
print (x)
# 结果
[[ 6917529027641081856 5764616291768666155]
[ 6917529027641081859 -5764598754299804209]
[ 4497473538 844429428932120]]
import numpy as np
# 默认为浮点数
x = np.zeros(5)
print(x)
# 设置类型为整数
y = np.zeros((5,), dtype = int)
print(y)
# 自定义类型
z = np.zeros((2,2), dtype = [('x', 'i4'), ('y', 'i4')])
print(z)
# 结果
[0. 0. 0. 0. 0.]
[0 0 0 0 0]
[[(0, 0) (0, 0)]
[(0, 0) (0, 0)]]
import numpy as np
# 默认为浮点数
x = np.ones(5)
print(x)
# 自定义类型
x = np.ones([2,2], dtype = int)
print(x)
# 结果
[1. 1. 1. 1. 1.]
[[1 1]
[1 1]]
numpy.asarray
numpy.asarray 类似 numpy.array,但 numpy.asarray 参数只有三个,比 numpy.array 少两个
import numpy as np
x = [1,2,3]
a = np.asarray(x)
print (a)
# 结果
[1 2 3]
numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象
import numpy as np
x = np.arange(5)
print (x)
# 结果
[0 1 2 3 4]
import numpy as np
# 设置了 dtype,返回类型为float
x = np.arange(5, dtype = float)
print (x)
# 结果
[0. 1. 2. 3. 4.]
numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的
import numpy as np
a = np.linspace(1,10,10)
print(a)
# 结果
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
import numpy as np
a = np.arange(10)
s = slice(2,7,2) # 从索引 2 开始到索引 7 停止,间隔为2
print (a[s])
# 结果
[2 4 6]
import numpy as np
a = np.arange(10)
b = a[2:7:2] # 从索引 2 开始到索引 7 停止,间隔为 2
print(b)
# 结果
[2 4 6]
numpy.reshape 函数可以在不改变数据的条件下修改形状
import numpy as np
a = np.arange(8)
print ('原始数组:')
print (a)
print ('\n')
b = a.reshape(4,2)
print ('修改后的数组:')
print (b)
# 结果
原始数组:
[0 1 2 3 4 5 6 7]
修改后的数组:
[[0 1]
[2 3]
[4 5]
[6 7]]
import numpy as np
a = np.arange(12).reshape(3,4)
print ('原数组:')
print (a )
print ('\n')
print ('对换数组:')
print (np.transpose(a))
# 结果
原数组:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
对换数组:
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
import numpy as np
a = np.arange(12).reshape(3,4)
print ('原数组:')
print (a)
print ('\n')
print ('转置数组:')
print (a.T)
# 结果
原数组:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
转置数组:
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]