从头开始学人工智能day03

从头开始学人工智能

文章目录

  • 从头开始学人工智能
    • 第三天,加深numpy学习
        • 接着上次的继续!现在是array合并操作了
          • array纵向合并
          • array横向合并
          • array转置为矩阵
          • 矩阵横向合并
          • 矩阵纵向合并
          • 矩阵等量切分
          • 矩阵不等量分割
        • 这里一个小小的底层问题
          • copy和=的区别
        • 广播机制
        • 常用函数总结
          • 数字出现次数
        • 总结

第三天,加深numpy学习

之所以这里是第三天,是因为昨天比赛去了,然后成绩嘛!咳咳咳,不是很理想,昨天总结反思了一下,调整一下学习方式和方向,争取后面的比赛赛出成绩!在哪里跌倒就不能在同一个地方跌倒两次!毕竟咋是程序猿,啥问题没碰见过!好吧,我们接着学习这玩意!

接着上次的继续!现在是array合并操作了

array纵向合并
arrA = np.array([1,2,3])
arrB = np.array([4,5,6])

nums = np.vstack([arrA,arrB])
print(nums)

这里的vstack函数就是将两个数组上下合并,不过注意的是,这里合成出来是矩阵,所以两个数组要等长!然后参数的话是一个复合型的数据类型,也就是说数据不一定一致,而且合并的个数也可以不定下来!

arrA = np.array([1,2,3,4])
arrB = np.array(['hapi',5,6,5])
arrC = np.array([7,8,9,10])

# nums = np.vstack([arrA,arrB])
nums = np.vstack([arrA,arrC,arrB])
print(nums)

在这里插入图片描述

合并顺序也是按照序列来合并的!

array横向合并
arrA = np.array([1,2,3])
# arrB = np.array(["hello",4,5])
arrN = np.array([11,21,31])
arrC = np.array([4,5,6,7])

nums = np.hstack((arrA,arrN,arrC))
print(nums)

这里简单说一下就好,长度不用等长,原因也很明显,这都横向合并了,长度本来就在改变,还在乎一个长度不等长吗?其他都差不多,之所以有一个arrB在这,大家可以想想,和上面数据有什么不同!

在这里插入图片描述

array转置为矩阵
changeNum1 = nums[np.newaxis,:]
changeNum2 = nums[:,np.newaxis]
print(changeNum1)
print(nums.shape)
print(changeNum1.shape)

print("---------------------------------")
print(changeNum2)
print(nums.shape)
print(changeNum2.shape)

这里的nums就是上面的数组

从头开始学人工智能day03_第1张图片

可以对比一下,这里的转置有什么不同,对于np.newaxis,:是横向转置,也就是一个横向的矩阵(1*10),而另一个就是:,np.newaxis是纵向的,生成的是一个(10*1)的矩阵!

矩阵横向合并
arr1 =np.array([1,2,3])
arr2 = np.array([4,5,6])

nums1 = arr1[np.newaxis,:]
nums2 = arr2[np.newaxis,:]

print(nums1)
print(nums2)
result = np.concatenate([nums1,nums2],axis=1)
print(result)

横向合并嘛,意思很明确,就是加列,这里注意的是两个转置矩阵的行数得是相同的,可想而知,加列嘛,肯定每一列的数字是一样多的吧!

在这里插入图片描述

矩阵纵向合并
result = np.concatenate([nums1,nums2],axis=0)

这里注意的就是,原来的矩阵列数是相同的!

矩阵等量切分
nums = np.arange(1,17,1).reshape(4,4)
print(nums)

print(np.split(nums,2,axis=0))
print(np.split(nums,4,axis=1))

先上结果

从头开始学人工智能day03_第2张图片

参数是values,切的对象是谁?几等分?在什么方向上?

这就很容易理解了!切完还是矩阵!注意的是,等分就是等分,别来小数,简单数学!

这有点麻烦!

print(np.vsplit(nums,2))
print(np.hsplit(nums,4))

上面提到合并,这里就可以拆分!和np.split一致

从头开始学人工智能day03_第3张图片

矩阵不等量分割
print(np.array_split(nums, 5, axis=1))

从头开始学人工智能day03_第4张图片

这里不能在细分了,直接用空的来凑数,多了的话先前面的合并一起显示出来!后面的轮不到!

这里一个小小的底层问题

copy和=的区别

在=的基础上,多少个对象都是会有关联的!

而copy才会是生成一个新的数据出来

nums = np.arange(1, 17, 1).reshape(4, 4)
print(nums)

temp = nums

temp[0][1] = 0
print(nums)

从头开始学人工智能day03_第5张图片

这类似啥!引用数据对象吧!也就是硬链接!

nums = np.arange(1, 17, 1).reshape(4, 4)
print(nums)

temp = np.copy(nums)
temp[0][1] = 0
print(temp)
print(nums)

从头开始学人工智能day03_第6张图片

这就是一个新的对象,与之前的数据是一个软连接!

广播机制

a = np.array([[0, 0, 0],
           [10, 10, 10],
           [20, 20, 20],
           [30, 30, 30]])
b = np.array([0, 1, 2])
print(a + b)

在这里插入图片描述

不难发现,这里的每一行都加上了b数组的值!也就是两个数组的横方向上的维度是一致的话,就会向列维度高的维度去广播运算!

常用函数总结

数字出现次数
arr = np.array([1,2,0,2,3,9,6,5,8])
print(np.bincount(arr))

在这里插入图片描述

0出现一次,所以第一个数就是1,以此类推!

好吧!这里我就是小白!等我啃啃底层继续学习!

总结

基本的numpy就要到这里结束了!但这才是人工智能的第一步,也将是成就自己的第一步,多多巩固,这不是网文,而是名著,需要细细品味,反复琢磨!接下来还有一场比赛,日程的话我也要做调整了,不在同一地方摔两次!这地方就是比赛!之前计划一个项目在刚刚结束比赛后也要上了!不过,时间就是用来规划的!一起努力!!!

记录于 2022 04 10

你可能感兴趣的:(python)