一、NumPy 简介
NumPy — 科学计算库
结构核心:
- ndarray 对象
- 存储单一数据类型的多维数组对象。
- 内存是连续的。
- 两种存储风格
- C风格
- C 语言风格
- 按行优先存储
- F风格
- fortran 语言风格
- 按列优先存储
- C风格
# 导包语句
import numpy as np
二、数组的属性
ndarray(数组)是存储单一数据类型的多维数组。
属性 | 说明 |
---|---|
ndim | 返回 int 。表示数组的维数 |
shape | 返回 tuple 。表示数组的形状,对于 n 行 m 列的矩阵,形状为(n,m) |
size | 返回 int 。表示数组的元素总数,等于数组形状的乘积 |
dtype | 返回 data-type 。描述数组中元素的类型 |
itemsize | 返回 int 。表示数组的每个元素的大小(以字节为单位)。 |
维度的理解
三、ndarray对象
(一)数组的创建
1、固定值数组
array
numpy.array(object, dtype = None, order = None, ndmin = 0)
名称 | 描述 |
---|---|
object | 数组或嵌套的数列 |
dtype | 数组元素的数据类型,可选 |
order | 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认) |
ndmin | 指定生成数组的最小维度 |
创建数组并查看数组属性:
import numpy as np
# 将列表转化为 数组
# arr = np.array([1,2,3,4]) # 一维数组
# arr = np.array([[1,2,3,4],[5,6,7,8]]) # 二维数组
arr = np.array([[[1,2,3,4],[5,6,7,8]],[[1,2,3,4],[5,6,7,8]]]) # 三维数组
print("arr:\n",arr)
print("arr 的类型:\n",type(arr))
# ndarray对象属性
# ndim shape size dtype itemsize
print("arr 的维度:\n",arr.ndim)
print("arr 的形状:\n",arr.shape)
print("arr 的大小:\n",arr.size)
print("arr 的元素的类型:\n",arr.dtype)
print("arr 的每一个元素的大小:\n",arr.itemsize)
arange
arange([start,] stop[, step,], dtype=None)
"""
参数1 开始位置
参数2 结束位置,不包含结束位置
参数3 步长
如果开始值为0,且步长为1,那么开始与步长可以省略
"""
示例:
linspace
创建等差数组
linspace(start, stop, num=50,endpoint=True, retstep=False,)
"""
创建等差数组
参数1 开始值
参数2 结束值,包含结束值
参数3 生成数组的元素的个数
"""
示例:
logspace
创建等比数组
logspace(start, stop, num=50, endpoint=True, base=10.0)
"""
创建等比数组
参数1 开始值
参数2 结束值
参数3 生成数组的元素的个数
参数base ---默认是10,生成10^开始,10^结束的等比数组
"""
示例:
zeros
创建元素全部为 0 的数组
zeros(shape, dtype=None, order='C')
# 创建元素全部为0的数组
# shape 生成数组的形状
示例:
ones
创建全部为 1 的数组
ones(shape, dtype=None, order='C')
# 创建元素全部为1的数组
# shape 生成数组的形状
示例:
diag
提取一个对角线 或 构造一个对角线数组。
diag(v, k=0)
"""
提取一个对角线或构造一个对角线数组。
"""
当 v 为2位数组,提取对角线:
当 v 为1维数组,构造一个对角线数组:
eye
返回一个 2维数组,对角线上是 1,其他地方是 0
eye(N, M=None, k=0, dtype=float, order='C')
"""
返回一个2-D数组,对角线上是1,其他地方是0
"""
示例:
2、随机数组
rand
创建一个均匀分布的【小数】数组,随机数在 [0,1) 之间
rand(*dn)
"""
创建一个均匀分布的小数数组,随机数在[0,1)之间
参数:
只有一个参数,是列维度
只有两个参数,第一个是行维度,第二个是列维度
有三个参数,第一个是块维度,第二个是行维度,第三个是列维度
rand 和 random 和 random_sample 是一样的
"""
示例:
randn
创建符合【正态分布】的数组
randn(*dn)
"""
创建符合正态分布的数组
参数 跟rand一样
同standard_normal一样
"""
示例:
randint
生成随机【整数】数组
randint(low, high=None, size=None)
"""
生成随机整数 数组
[low,high)
size 可以是元素个数,也可以是生成数组的形状
"""
示例:
uniform
生成指定范围内的随机小数的均匀数组
uniform(low=0.0, high=1.0, size=None)
"""
生成指定范围内的随机小数的均匀数组
生成[low,high)的随机均匀分布的小数
"""
示例:
(二)数组的类型及形状
1、数据类型 dtype
Numpy 里面的数据类型,其实就是封装了 python 里面基础的数据类型,然后还进行细致划分,之后封装为 np.数据类型
。
- 创建数组的时候,可以通过 dtype 属性来指定 元素的数据类型
# 创建一个数组
arr = np.array([1,2,3,4],dtype=np.float32)
print("arr:\n",arr)
print("arr 的元素类型:\n",arr.dtype)
- 也可以进行强制转换
# res = np.bool(1)
# res = np.bool(0)
res = np.float32(5)
print("res:\n",res)
- 可以通过
astype
来修改数据类型
# 将arr的float32类型转化为int32类型
arr = arr.astype(np.int32)
print("arr:\n",arr)
print("arr 的元素类型:\n",arr.dtype)
- ndarray 也可以存储复合数据类型 — 了解
# 存储人对象 ---人对象 3个属性 ---姓名,身高,体重
df = np.dtype([("name",np.str,40),("height",np.float32),("weight",np.float32)])
# 创建一个存储复合数据的数组对象
arr = np.array([("zs",168.5,50.5),("ls",178.0,65.0),("ww",172,55)],dtype=df)
print("arr:\n",arr)
2、形状 shape
# 创建一个数组
# 形状 ---shape ---元组
arr = np.arange(16)
print("arr:\n",arr)
print("arr 的形状:\n",arr.shape)
- 可以通过 修改数组的属性,改变数组的形状
# 1、通过 shape属性进行修改
arr.shape = (4,4)
print("arr:\n",arr