【画学numpy】2.numpy数组创建

本文是画学numpy系列文章之一
⭐️github:drawing_and_studying_numpy包含了可以运行的notebook文件以及本文绘制的所有插图。
也可以选择在百度的AI studio【画学numpy】上运行notebook代码

画学numpy系列文章目录:

  • 【画学numpy】介绍
  • 【画学numpy】1.numpy数组初识
  • 【画学numpy】2.numpy数组创建
  • 【画学numpy】3.numpy数组操作
  • 【画学numpy】4.numpy数组索引
  • 【画学numpy】5.numpy数组运算

numpy数组创建

上一小节中,创建一个长为4的1维数组要写4个数字,如果要创建一个长为100的数组,就要写100个数字,未免太麻烦了一点。

本小节,将介绍一系列十分常用且方便的数组创建方法:

  • 等间隔数组:数组两两之间间隔相同,类似等差数列。
  • 全等数组:数组里所有元素都相同。
  • 随机数组:按要求随机生成数组,做模拟的时候很有用。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uz8DiaYd-1647971377746)(./images/2.numpy数组创建_思维导图1.png)]
import numpy as np
print(np.__version__)
1.22.3

等间隔数组

以下两个函数只能创建一维数组。

  • np.arange(): 按照给定的步长根据起点和终点生成一维数组
  • np.linspace(): 按照给定的数组长度,均匀划分起点到终点的距离生成一维数组

np.arange()

官方文档

numpy.arange(start, end, step, ...)

np.arange()函数和python自带的range()函数十分类似。

  • start: 起点,默认为0
  • end: 终点
  • step: 步长,默认为1

从起点开始,每次按步长递增生成数组,生成的数组不包括终点

只有一个参数时,会默认从0开始,以步长1生成数组。
【画学numpy】2.numpy数组创建_第1张图片

a = np.arange(4)
print(a)
[0 1 2 3]

提示

为了文档更加简洁,下面的代码块省略赋值后再print的操作。

坐标轴上的空心圆表示生成的数组不包括这个点。
只有两个参数时,表示指定了起点和终点,默认以步长1生成数组。

【画学numpy】2.numpy数组创建_第2张图片

np.arange(2, 6)
array([2, 3, 4, 5])

从2开始到9结束,步长为2
【画学numpy】2.numpy数组创建_第3张图片

np.arange(2, 9, 2)
array([2, 4, 6, 8])

range的一大区别是np.arange的步长可以是小数

小数的创建规律同整数
【画学numpy】2.numpy数组创建_第4张图片

np.arange(1, 1.4, 0.1)
array([1. , 1.1, 1.2, 1.3])

提示

再次提醒np.arange(start, end, step),这个函数生成的数组不包含end

np.linspace()

官方文档

numpy.linspace(start, end, num=50, ...)
  • start: 起点
  • end: 终点
  • num: 一维数组长度

根据起点和终点生成间隔相同的一维数组,生成的数组包括终点,数组长度为num

下面以1作为起点,4作为终点,尝试不同的num以了解np.linspace的使用
num=5时,生成的数组长度为5,生成的数组包含了起点1和终点4,且前后两个元素的间隔相等
【画学numpy】2.numpy数组创建_第5张图片

np.linspace(1, 4, num=5)
array([1.  , 1.75, 2.5 , 3.25, 4.  ])

num=4
【画学numpy】2.numpy数组创建_第6张图片

np.linspace(1, 4, num=4)
array([1., 2., 3., 4.])

num=3
【画学numpy】2.numpy数组创建_第7张图片

np.linspace(1, 4, num=3)
array([1. , 2.5, 4. ])

num=2时,生成的数组恰好是由起点和终点组成的
【画学numpy】2.numpy数组创建_第8张图片

np.linspace(1, 4, num=2)
array([1., 4.])

num=1时,生成了一个只有起点的数组
【画学numpy】2.numpy数组创建_第9张图片

np.linspace(1, 4, num=1)
array([1.])

全等数组

以下3个函数创建的数组,所有数组元素均相等

  • np.zeros(): 生成一个全为0的一维或多维数组。
  • np.ones(): 生成一个全为1的一维或多维数组。
  • np.full(): 生成一个元素全部相等的一维或多维数组。

np.zeros()

官方文档

numpy.zeros(shape, ...)

生成一个全为0的数组,使用频率也是很高的一个函数
生成一个全为0的一维数组

np.zeros(shape=4)
array([0., 0., 0., 0.])

生成一个全为0的二维数组

np.zeros(shape=(3, 4))
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])

【画学numpy】2.numpy数组创建_第10张图片

np.ones()

官方文档

numpy.ones(shape, ...)

生成一个全为1的数组,与np.zeros()类似
生成一个全为1的一维数组

np.ones(shape=4)
array([1., 1., 1., 1.])

生成一个全为1的二维数组

np.ones(shape=(3, 4))
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])

【画学numpy】2.numpy数组创建_第11张图片

np.full()

官方文档

numpy.full(shape, fill_value, ...)

生成一个全为某个数的数组,这个数也可以是字符型的。

  • shape: 数组的形状
  • fill_value: 数组的值
    生成一个全为2.4的一维数组
np.full(shape=4, fill_value=2.4)
array([2.4, 2.4, 2.4, 2.4])

生成一个全为"a"的二维数组

np.full(shape=(3, 4), fill_value='a')
array([['a', 'a', 'a', 'a'],
       ['a', 'a', 'a', 'a'],
       ['a', 'a', 'a', 'a']], dtype='

【画学numpy】2.numpy数组创建_第12张图片

随机数组

下面介绍5个常用的随机数组创建函数

  • np.random.random(): 生成一个0到1之间均匀分布的随机数组
  • np.random.uniform(): 生成一个指定区间均匀分布的随机数组
  • np.random.randn(): 生成一个标准正态分布的的随机数组
  • np.random.normal(): 生成一个指定正态分布的的随机数组
  • np.random.randint(): 生成一个指定区间范围的随机整数数组

np.random.random()

官方文档

numpy.random.random(size)

生成一个0到1之间的随机数组

  • size: 数组的形状

生成一个0到1之间的1维随机数组

np.random.random(4)
array([0.9155639 , 0.0879231 , 0.50418975, 0.79625964])

生成一个0到1之间的2维随机数组

np.random.random((3, 4))
array([[0.29551936, 0.42407484, 0.65833207, 0.54675449],
       [0.64280259, 0.42581316, 0.12087349, 0.72347867],
       [0.36625864, 0.71585893, 0.24240265, 0.90152112]])

np.random.uniform()

官方文档

numpy.random.uniform(low=0.0, high=1.0, size=None)

生成一个范围是lowhigh之间的随机数组

  • low: 数组的最小值
  • high: 数组的最大值
  • size: 数组的形状

其实跟np.random.random()类似,就是多了控制范围的2个参数。
生成一个2到5之间的1维随机数组

np.random.uniform(low=2, high=5, size=4)
array([4.46704977, 3.28453679, 3.8914482 , 4.23255661])

生成一个-3到3之间的2维随机数组

np.random.uniform(-3, 3, (3, 4))
array([[ 0.53919671,  2.70351516,  1.91513643, -0.0198369 ],
       [ 2.43241932, -2.99126798, -2.1072604 , -1.95992406],
       [ 2.23506767, -2.32354201,  1.18681695, -0.09019135]])

np.random.randn()

官方文档

numpy.random.randn(d0, d1, d2, ...)

生成一个均值为0方差为1的标准正态分布随机数组

  • d0, d1, ...: 数组的形状
    生成一个1维标准正态分布随机数组
np.random.randn(4)
array([-0.97841294,  0.08917692,  0.05429765,  0.38660857])

生成一个2维标准正态分布随机数组

np.random.randn(3, 4)
array([[ 1.64886552,  0.36417621,  0.77745513, -1.14481688],
       [-1.0317714 , -0.13213342, -0.38355106, -1.09655604],
       [ 1.5982574 ,  0.10802592, -1.94052385,  1.07061462]])

np.random.normal()

官方文档

numpy.random.normal(loc=0.0, scale=1.0, size=None)

生成一个均值为loc标准差为scale的正态分布随机数组

  • loc: 数组的均值
  • scale: 数组的标准差
  • size: 数组的形状
    生成一个均值为2,标准差为10的一维正态分布随机数组
np.random.normal(loc=2, scale=10, size=4)
array([ 11.44176805, -18.58578423,  -0.1879512 ,  10.43410251])

生成一个均值为-5,标准差为5的二维正态分布随机数组

np.random.normal(-5, 5, size=(3, 4))
array([[  0.78720712,  -1.01289235,  -2.97885233,   0.42613163],
       [ -6.00490185,  -0.71370871,   0.1223361 ,  -9.68017774],
       [ -3.09613496, -10.65665833,  -3.89814507,  -0.69998495]])

np.random.randint()

官方文档

numpy.random.randint(low, high=None, size=None, ...)

生成一个指定区间[low, high)内的随机整数数组,不包含最大值

  • low: 最小值
  • high: 最大值,如果high=None,那默认生成的范围是[0, low)。否则生成的范围是[low, high)
  • size: 数组的形状
    生成一个0到5(不包含5)之间的随机一维整数数组
# np.random.randint(0, 5, 8)  # 效果同下
np.random.randint(5, size=8)
array([0, 1, 3, 4, 3, 0, 2, 2])

生成一个1到8(不包含8)之间的随机二维整数数组

np.random.randint(1, 8, (3, 4))
array([[2, 6, 7, 4],
       [3, 2, 5, 2],
       [3, 4, 1, 4]])

小结

【画学numpy】2.numpy数组创建_第13张图片

下一章【画学numpy】3.numpy数组操作

你可能感兴趣的:(python,机器学习,数据分析,人工智能,深度学习)