系列文章目录
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
目录
前言
使用numpy创建各种维度的ndarray对象
提示:以下是本篇文章正文内容,下面案例可供参考
一、基本的创建方式
1.1、np.array()
import numpy as np
list1 = [1, 2, 3, 4, 5]
print(list1)
print(type(list1))
# 将python的List类型转换为numpy的ndarray
array1 = np.array(list1)
print(array1)
print(type(array1))
np.array()创建多维数组
# 多维数组
array2 = [[1, 2], [3, 4], [5, 6]]
print(array2)
print(type(array2))
# 这是一个二维数组,二维数组即列表中的每个元素都是一个一维列表,
# np.array()函数,参数给了什么样式的数据,就构建什么样式的ndarray
np_array2 = np.array(array2)
print(np_array2)
print(type(np_array2))
1.2 np.arange()
import numpy as np
# 在原始的python中想要生成一个序列list需要借助range()函数
list1 = list(range(0, 10)) # 这里的0, 10, 2分别代表开始值=0,结束值=10(取不到10),步长=2 -> [start, end) -> [0, 10)
print(list1)
# numpy同样具备这样一个方法,使用np.arange(),用法和range完全一样,但是更加强大
np_list = np.arange(0, 10, 2) # 同样是[start, end)区间
print(np_list)
# 序列的步长无论是range函数还是np.arange都是可选参数,如果不传入步长那么默认为1
# np.arange()比python中range的强大之处
# 1. 步长可以为浮点数
np_list_step_float = np.arange(0, 10, 0.5)
print(np_list_step_float)
# 2. 步长可以是负值,相当于逆序 start < end 则序列为空,反之就是从大到小的一个序列
np_list_step_negative = np.arange(10, 0, -0.5)
print(np_list_step_negative)
numpy包含python中的功能,但是有比其更加丰富强大
1.3 特殊矩阵创建
1.3.1 np.ones()/np.zeros()/np.full()
import numpy as np
# np.ones()/np.zeros()/np.full()
# 创建值全为1的数组
n = np.ones((3, 4)) # 生成一个3行4列的元素全部都是1的二维数组
print(n)
# 创建值全为0的数组
n = np.zeros((3, 4))
print(n)
# 创建值全为某个值得数组
n = np.full((3, 4), -1) # 第一个参数(shape):维度,第二个参数(fill_value):填充的元素的值
print(n)
1.3.2 np.ones_like()/np.zeros_like()/np.full_like()
按照已有的ndarray数组的形状来创建全零全一数组
import numpy as np
# np.ones_like()/np.zeros_like()/np.full_like()
# 生成一个0-19的一个序列的一维数组,通过reshape操作将数组维度变为5行4列的一个二维数组
n = np.arange(0, 20).reshape((4, 5))
# n = np.arange(0, 20).reshape((4, -1)) # 确定一个维度后-1可以自动计算剩余维度
print(n)
# 创建一个与参数数组形状相同的数组,值全为1
x = np.ones_like(n) # 复制数组n的维度,保持一样的维度,但是元素都是1
print(x)
# 创建一个与参数数组形状相同的数组,值全为0
x = np.zeros_like(n) # 复制数组n的维度,保持一样的维度,但是元素都是0
print(x)
# 创建一个与参数数组形状相同的数组,值填充为5
x = np.full_like(n, 5) # 复制数组n的维度,保持一样的维度,但是元素填充为fill_value:5
print(x)
1.3.3 空矩阵、单位矩阵、对角阵
import numpy as np
# np.empty()空矩阵
n = np.empty((3, 4)) # 创建一个3行4列的空矩阵
# 这里讲的空矩阵并不是真正的什么也没有,而是没有经过初始化,内容随机,且依赖于内存状态
print(n)
# np.eye()/np.identity()单位矩阵
# np.eye()可以创建一个(N,M)的单位矩阵,
n = np.eye(4, 3) # 创建一个4行3列的单位矩阵,对角线为1
print(n)
# 当N=M时
n = np.eye(4) # N=M=4的一个单位方阵
print(n)
# np.eye()还有一个可选参数k
# int型,可选项,对角线的下标,默认为0表示的是主对角线,负数表示的是低对角,正数表示的是高对角。
n = np.eye(4, k=1)
print(n)
n = np.eye(4, k=-1)
print(n)
# np.identity() 这个函数和之前的区别在于,这个只能创建方阵,也就是N=M
n = np.identity(4)
print(n)
# 对角阵np.diag()
# np.diag(v, k) v:主对角线数值,k:对角线的位置默认为0,大于零位于对角线上面,小于零则在下面。
array_diag = np.diag([1, 2, 3, 4])
print(array_diag)
b = np.arange(0, 9).reshape((3, 3))
print(b)
array_diag = np.diag(b)
print(array_diag)
# 可以发现一个有意思的事情,当np.diag()传入一个一维数组,则输出为一个二维的对角阵,
# 当时个二维数组时,输出这个二维矩阵的对角线
array_diag = np.diag([1, 2, 3, 4], k=1)
print(array_diag)
array_diag = np.diag([1, 2, 3, 4], k=-1)
print(array_diag)
# k就是对角阵开始元素位置,自行可以试一试
1.3.4 等差、等比数列
import numpy as np
# arange
nda1 = np.arange(1, 20, 3) # 生成一个等差数列
# arange关注元素之间的差距
print(nda1)
nda2 = np.linspace(1, 20, 3) # 生成一个等差数列
# linespace关注的是一共生成多少个元素
print(nda2)
# 创建等差数列的数值
# num指定数组元素的个数。endpoint指定是否包含终止点(默认为True)
line_array = np.linspace(1, 10, 6, endpoint=True, dtype=np.float32)
# 由于可以取左边界,所以中间还需要生成9个元素
print(line_array)
# 生成一个范围在1-10之间,可以取右边界的一个等差数列,每个元素的数据类型float32,一共取10个元素
line_array = np.linspace(1, 10, 10, endpoint=True, dtype=np.int32)
print(line_array)
# np.logspace() 等比数列
# logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0)
# 创建等比数列数组,前面两个参数(start, stop)指定指数
# num指定数组元素的个数。endpoint是否包含终止点
# base用来指定底数,默认为10
log_array = np.logspace(1, 10, num=10, endpoint=True, base=2)
print(log_array)
arange和linespace都可以产生一系列区间值
对于arange更关注的是数值之间间隔多少,不关注具体会产生多少数值
对于linespace,更关注的是产生的数值的个数,而不太关注数值之间间隔多少
二、随机函数创建
1. np.random.rand()
用于指定形状的0-1之间的随机数
import numpy as np
# 随机生成一个元素的数组
aa = np.random.rand(1)
print(aa)
# 随机生成几个数据的随机数组
aa = np.random.rand(3)
print(aa)
# 生成指定形状的随机数组
aa = np.random.rand(2, 3)
print(aa)
2. np.random.random()
用法和rand基本一样指定形状是传入的为元组
import numpy as np
aa = np.random.random((2, 3))
print(aa)
3. np.random.randn()
生成服从正态分布的0-1之间的随机数
import numpy as np
# 用法和rand函数一样,只是randn函数是服从正态分布的
aa = np.random.randn(2, 3)
print(aa)
4. np.random.normal()
指定方差和均值的正态分布
import numpy as np
# np.random.normal()这个函数也可以生成服从正态分布的随机值,而且可以指定均值和方差
# 一共含有三个参数(loc, scale, size), 分别代表生成的高斯分布的随机数的均值、方差和输出多少个数值
# loc: 均值
# scale: 方差
# size: 元素个数
aa = np.random.normal(loc=2, scale=0.2, size=6)
print(aa)
aa = np.random.normal(loc=2, scale=0.2, size=(6, 6))
print(aa)
5. np.random.uniform() 均匀分布
# 均匀分布
# 生成1-10之间的5个随机数,可以包含1,但是不包含10
aa = np.random.uniform(1, 10, 5)
print(aa)
# 生成指定形状的数值
aa = np.random.uniform(1, 10, (3, 2))
print(aa)
6. np.random.randint()
生成随机整数
# np.random.randint()随机整数
# 在1-10范围内, 随机生成5个int32类型的数值。生成的结果集可能出现重复数据
aa = np.random.randint(1, high=10, size=5, dtype=np.int32)
print(aa)
# 生成一个指定范围的随机二维数组
aa = np.random.randint(1, high=10, size=(3, 2), dtype=np.int32)
print(aa)
7.np.random.choice()
从指定数据集中,随机抽选一个数据
import numpy as np
# np.random.choice()从指定数据集中,随机抽选一个数据
# 从数值集合中,按照指定概率生成随机数,参数p的总和一定要是1
aa = np.random.choice([1, 2, 3, 4], p=[0.1, 0.2, 0.3, 0.4])
print(aa)
# 检测是不是按照概率生成的
list1 = [0, 0, 0, 0]
for i in range(100000):
aa = np.random.choice([1, 2, 3, 4], p=[0.1, 0.2, 0.3, 0.4])
list1[aa - 1] = list1[aa - 1] + 1
# 打印每个数值出现的次数
print(list1)
# 计算每个值出现的概率
result_list = [value/sum(list1) for value in list1]
print(result_list)
8. 随机种子和打乱数据
import numpy as np
# seed()用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed()值, 则每次生成的随机数都相同
# 如果不设置这个值,则系统根据时间自己选择这个值,此时每次生成的随机数因时间差异而不同
np.random.seed(0)
aa = np.random.rand(2, 3)
np.random.seed(0)
bb = np.random.rand(2, 3)
print(aa, bb)
# np.random.shuffle()打乱数据
aa = np.arange(10)
print(aa)
# 打乱数据
np.random.seed(0) # 指定随机种子,打散数据可以复现
np.random.shuffle(aa)
print(aa)
aa = np.arange(10)
np.random.seed(0)
np.random.shuffle(aa)
print(aa)
总结
提示:这里对文章进行总结:
本篇主要讲解了常用的numpy创建数组的方式