博文配套视频课程:24小时实现从零到AI人工智能
numpy与list比较
NumPy系统是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多
- List是列表,可以通过索引查找数值,但是不能对整个列表进行数值运算
- np.array可以通过reshape修改矩阵维度,而List没有此属性
- 物理意义:np.array每一行以后代表的是样本,每一列代表的是特征,List列表一般是用来存储相同数据类型的数据结构
创建矩阵的第1种方式
此方式可以最简洁的创建一个np.array一维或者多维矩阵,后续DataFrame格式的data属性也支持通过此方式生成数据,一般创建成功后直接调用reshape函数可以设置矩阵的形状
t1 = np.arange(12)
# 矩阵支持四则运算 (矩阵中每个元素分别进行运算)
t1 = t1 + 1
print(t1, type(t1),t1.shape)
# [ 1 2 3 4 5 6 7 8 9 10 11 12] <class 'numpy.ndarray'> (12,)
l = [1, 2, 3, 4, 5]
# 掌握 nd.array与list区别
# l = l + 1
print(l, type(l))
# [1, 2, 3, 4, 5] <class 'list'>
# 可以通过reshape修改矩阵的形状
t1 = t1.reshape(3,4)
print(t1, type(t1),t1.shape)
# [[ 1 2 3 4]
# [ 5 6 7 8]
# [ 9 10 11 12]] <class 'numpy.ndarray'> (3, 4)
创建矩阵的第2种方式
np.array表面上看起来生成矩阵略复杂,但是有两个优点,第一可以生成不同的数据类型的矩阵。第二后续加载图片生成的二进制或者图片可以直接通过此方法转化成np.array矩阵结构
# 可以把list转化为ndarray
data = [[1,2,3.14,4],
[True,6,7,None]]
print(data,type(data))
# [[1, 2, 3.14, 4], [True, 6, 7, None]] <class 'list'>
# 创建ndarray时支持各种类型
t2 = np.array(data)
print(t2, type(t2),t2.shape)
# [[1 2 3.14 4]
# [True 6 7 None]] <class 'numpy.ndarray'> (2, 4)
创建随机数矩阵
罗列了3种生成随机矩阵的最常见方式,特别要把握第3种normal 正态分布的随机数,因为现实生活中很多的行业和数据呈现的是正态分布的结构,后续如果我们采用normal方式来模拟数据会大大提高机器学习和深度学习的效率
t3 = np.random.random(size=[3,4])
print(t3, type(t3),t3.shape)
'''
[[0.08251817 0.94676616 0.03582348 0.962667 ]
[0.86131628 0.79905465 0.03689777 0.93871715]
[0.60210801 0.82896027 0.51373144 0.80101307]] <class 'numpy.ndarray'> (3, 4)
'''
t3 = np.random.randint(1,100,size=(3,4))
print(t3, type(t3),t3.shape)
'''
[[90 47 12 45]
[ 8 68 95 45]
[60 19 68 59]] <class 'numpy.ndarray'> (3, 4)
'''
t3 = np.random.normal(loc=10,size=[3,4])
print(t3, type(t3),t3.shape)
'''
[[10.88115518 9.11658607 8.9742216 9.76911218]
[ 9.49499227 9.72997241 10.7788368 9.74349227]
[ 9.7147179 10.78253949 9.95693574 9.95096342]] <class 'numpy.ndarray'> (3, 4)
'''