这是机器未来的第39篇文章
原文首发地址:https://blog.csdn.net/RobotFutures/article/details/126092621
将列表或元组转换为ndarray数组
import numpy as np
arr = np.array([1,2,3,4,5]) # 创建一维数组
arr
array([1, 2, 3, 4, 5])
arr2 = np.array([[1,2,3,4],[5,6,7,8]], dtype=float) # 创建二维数组
arr2
array([[1., 2., 3., 4.],
[5., 6., 7., 8.]])
arr3 = np.array([[[1]]]) # 创建三维数组
arr3
array([[[1]]])
print(f"arr_ndim:{arr.ndim}, arr2_ndim:{arr2.ndim}, arr3_ndim:{arr3.ndim}")
print(f"arr_shape:{arr.shape}, arr2_shape:{arr2.shape}, arr3_shape:{arr3.shape}")
arr_ndim:1, arr2_ndim:2, arr3_ndim:3
arr_shape:(5,), arr2_shape:(2, 4), arr3_shape:(1, 1, 1)
linespace函数常用来生成matplot图标展示的X轴。
x1 = np.linspace(start=1,stop=10,num=10)
start:起始值,stop:结束值(包含),num:元素个数
x1 = np.linspace(start=1,stop=10,num=10)
x1
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
x2 = np.arange(start=1,stop=100,step=3)
可以指定步长step
x2 = np.arange(start=1,stop=100,step=3)
x2
array([ 1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49,
52, 55, 58, 61, 64, 67, 70, 73, 76, 79, 82, 85, 88, 91, 94, 97])
x = np.ones(shape=(3,3))
x
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
np.zeros(shape=(3,3))
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
x2 = np.arange(start=1,stop=100,step=3)
print(x2)
x2_1 = np.ones_like(x2)
print(x2_1)
[ 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70
73 76 79 82 85 88 91 94 97]
[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
np.zeros_like(x2)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
生成指定ndarray对象的对角矩阵
x2 = np.linspace(start=1, stop=64,num=64)
x2 = x2.reshape(8, 8)
print(x2)
np.diag(x2)
[[ 1. 2. 3. 4. 5. 6. 7. 8.]
[ 9. 10. 11. 12. 13. 14. 15. 16.]
[17. 18. 19. 20. 21. 22. 23. 24.]
[25. 26. 27. 28. 29. 30. 31. 32.]
[33. 34. 35. 36. 37. 38. 39. 40.]
[41. 42. 43. 44. 45. 46. 47. 48.]
[49. 50. 51. 52. 53. 54. 55. 56.]
[57. 58. 59. 60. 61. 62. 63. 64.]]
array([ 1., 10., 19., 28., 37., 46., 55., 64.])
可以看到diag仅提取了8*8矩阵的左上右下对角线的值。
生成指定形状的单位矩阵。
np.eye(8)
array([[1., 0., 0., 0., 0., 0., 0., 0.],
[0., 1., 0., 0., 0., 0., 0., 0.],
[0., 0., 1., 0., 0., 0., 0., 0.],
[0., 0., 0., 1., 0., 0., 0., 0.],
[0., 0., 0., 0., 1., 0., 0., 0.],
[0., 0., 0., 0., 0., 1., 0., 0.],
[0., 0., 0., 0., 0., 0., 1., 0.],
[0., 0., 0., 0., 0., 0., 0., 1.]])
np.random.normal(loc=0.0, scale=1.0, size=None)
输入:
loc - 均值,可以为单个整数,也可以为数组,当为数组时指定每列的均值
scale - 标准差,可以为单个整数,也可以为数组,当为数组时指定每列的标准差
size - 数据的shape
返回:
ndarray对象
np.random.normal(3, 2.5, size=(2, 4))
array([[ 4.99637559, 4.41112766, -4.46850171, 2.34375326],
[ 7.80167697, 4.88896638, 4.50739853, 1.91669014]])
import numpy as np
from matplotlib import pyplot as plt
# loc-均值,scale-标准差,size-随机数组的数据形状shape
y = np.random.normal(loc=0.0, scale=1.0, size=1000)
x = np.linspace(0, 100, num=1000)
plt.hist(x=y, bins=50)
plt.show()
np.random.uniform(low=0.0, high=1.0, size=None)
输入:
low - 最小值,可以为单个整数,也可以为数组,当为数组时指定每列的最小值
high - 最大值,范围是开区间[low,high),可以为单个整数,也可以为数组,当为数组时指定每列的最大值
size - 数据的shape
数据类型为float
返回:
ndarray对象
import numpy as np
x = np.random.uniform(size=(3,3))
x
array([[0.55604474, 0.23922789, 0.49744522],
[0.72736682, 0.50886455, 0.89055923],
[0.86007017, 0.45767947, 0.64721748]])
import numpy as np
from matplotlib import pyplot as plt
y = np.random.uniform(size=(10000))
x = np.linspace(0, 100, num=10000)
plt.hist(x=y, bins=36)
plt.show()
np.random.random(size=None)
等同于np.random.uniform(size=None),即取默认low和high的uniform, 它是random_sample的别名/简称
输入:
size - 数据的shape
数据区间为: [0.0, 1.0)
数据类型为float
返回:
ndarray对象
x = np.random.random(size=(3,3))
x
array([[0.81853323, 0.68854024, 0.93096203],
[0.73975546, 0.48552889, 0.62078013],
[0.08407448, 0.16430265, 0.08354929]])
import numpy as np
from matplotlib import pyplot as plt
y = np.random.random(size=100000)
x = np.linspace(0, 100, num=100000)
plt.hist(x=y, bins=36)
plt.show()
随机分布达到一定的数据量之后,可以看到也是均匀分布的。
另外,np.random.rand也可以实现和np.random.random一样的功能,连size=()都不用写,直接填入数据形状即可。
x = np.random.rand(3,3)
x
array([[0.48217616, 0.45697736, 0.51243651],
[0.42060063, 0.12191877, 0.11430536],
[0.43719726, 0.88747028, 0.63576976]])
np.random.randint(low, high=None, size=None, dtype=int)
输入:
low - 最小值,必须填写,可以为单个整数,也可以为数组,当为数组时指定每列的最小值
high - 最大值,可以为单个整数,也可以为数组,当为数组时指定每列的最大值
size - 数据形状
数据区间为: [low, high),如果要实现[low, high]闭区间,则使用random_integers
数据类型可选多种整型
返回:
ndarray对象
x = np.random.randint(low=0, high=10, size=(3,3), dtype=np.uint8)
x
array([[5, 6, 4],
[6, 9, 8],
[4, 6, 7]], dtype=uint8)
写在末尾:
- 博客简介:专注AIoT领域,追逐未来时代的脉搏,记录路途中的技术成长!
- 专栏简介:从0到1掌握数据科学常用库Numpy、Matploblib、Pandas。
- 面向人群:AI初级学习者
- 专栏计划:接下来会逐步发布跨入人工智能的系列博文,敬请期待
- Python零基础快速入门系列
- 数据科学系列
- 人工智能开发环境搭建系列
- 机器学习系列
- 物体检测快速入门系列
- 自动驾驶物体检测系列
- …