前言
今天要延续昨天的NumPy语法练习
内容会分成两大部分
将会涵盖如何提取、更新、删除阵列里的资料
一样都是会练习一维跟二维阵列上的操作
利用昨天的基本语法+今天的练习,
应用在三维阵列的操作
由於数学公式众多
所以只会包含一点常用的基本操作
剩下的还是要在需要的时候上官网查询语法即可
这次学习的内容涵盖之前在学校上课过的内容
还有跟昨天一样的youtube影片
https://www.youtube.com/watch?v=QUT1VHiLmmI&t=394s
基本语法练习
透过索引值提取单笔资料
一维阵列: [索引值] 只需要在括号里加上索引值即可
arr = np.array([1,2,3])
arr[2] #这里想要取得索引值为2的数值
'''
3
'''
二维阵列:[row, column] ([第一维的索引值, 第二维的索引值])
#创建二维阵列
a = np.array([[1,2,3,4,5,6,7],[8,9,10,11,12,13,14]])
print(a)
'''[[ 1 2 3 4 5 6 7] [ 8 9 10 11 12 13 14]]'''
# 在二维阵列里使用[row,column],
# 前面放的是要取的第一个维度(row),後面放的是第二个维度(column)
a[1,5] # 使用a[1,-2]也可取得同样位置 #也可表示为a[1][5]
'''13'''
透过切片取出特定元素内容:" : "
一维阵列:
arr1 = np.arange(0, 10)
print(arr1)
'''array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])'''
arr1[5:] #想取得索引值为5之後所有的数值
'''array([5, 6, 7, 8, 9])'''
arr1[:5] #想取得索引值为5之前的所有数值
'''array([0, 1, 2, 3, 4])'''
二维阵列:
# 当我们要取得特定的row时
a[0,:] # 在第二个维度选项时使用 ":",可以取得第1个row里所有的值
''' array([1, 2, 3, 4, 5, 6, 7])'''
# 当我们要取得特定的column
a[:, 2]# 在第一个维度选项时使用 ":",可以取得第2个column里所有的值
'''array([ 3, 10])''' #第二列里的两个值就被取出来了
# 横向切片
a[:1]
'''array([[1, 2, 3, 4, 5, 6, 7]])'''
按照指定间隔取值:[start index : end index: step size]
一维阵列
#首先先建立一个1~12的一维阵列
prac = np.arange(13)
print(prac)
#若是我们想要他以偶数形式出现,step size设为2
even_num = prac[0:13:2]
'''[ 0 2 4 6 8 10 12]'''
#若是想要出现0,4,8,12, stepsize要设为4
print(prac[0:13:4])
'''[ 0 4 8 12]'''
二维阵列
# 在二维阵列中,我们先来看原本的a长怎样
a = np.array([[1,2,3,4,5,6,7],[8,9,10,11,12,13,14]])
print(a)
'''[[ 1 2 3 4 5 6 7] [ 8 9 10 11 12 13 14]]'''
# 如果我们想要看到 2,4,6
# [从第一个row里面去查, (start with 2: end in 5: stepsize 2)]
print(a[0, 1:6:2]) # 从後面开始算可以使用(-1) : a[0, 1:-1:2]
'''array([2, 4, 6])'''
更新值:直接用索引值取代原本的值
#创建二维阵列
a = np.array([[1,2,3,4,5,6,7],[8,9,10,11,12,13,14]])
print(a)
'''[[ 1 2 3 4 5 6 7] [ 8 9 10 11 12 13 14]]'''
#当我们想要把13换成200
a[1,5] = 200 # 13的索引值为[1,5]替换成200
'''[[ 1 2 3 4 5 6 7]
[ 8 9 10 11 12 200 14]]'''
#当我们想要改掉整个row或是column
a[:,2] = 55 # 想要把第二个column改成55
'''[[ 1 2 55 4 5 6 7]
[ 8 9 55 11 12 200 14]]'''
删除资料:np.delete(阵列名称, 索引值, axis=None)
# 首先创建任意数列
arr = np.arange(5,17)
print(arr)
'''[ 5 6 7 8 9 10 11 12 13 14 15 16]'''
#当我们想要删除8的话(索引值为3)
print(np.delete(arr,3))
'''[ 5 6 7 9 10 11 12 13 14 15 16] '''
# 可以看到8不见了
#使用切片的方法,指定切片位置
#当我们想要切掉5~9的时候
print(np.delete(arr,slice(0,5)))
'''[10 11 12 13 14 15 16] '''
复制阵列:.copy()
#当我们复制阵列的时候要很小心是否会影响到原本的阵列
#首先来看个例子
a = np.array([1,2,3])
b = a
b[0] = 100 #如果想把b里面的1改成100
print(b)
print(a)
'''
[100 2 3]
[100 2 3]'''
# 我们可以看到a的1也同时变为100
# 应该使用.copy()的语法 避免更改到原始值
a = np.array([1,2,3])
b = a.copy()
b[0] = 100
print(b)
print(a)
'''
[100 2 3]
[1 2 3]'''
# 可以看到使用copy後就不会更改到a的原始数值
多个矩阵相加:
# 垂直方向上相加矩阵
v1 = np.array([1,2,3,4])
v2 = np.array([5,6,7,8])
print(np.vstack([v1,v2])) #先看看两个矩阵加起来的样子
print("---------")
print(np.vstack([v1,v2,v1,v2]))
'''
[[1 2 3 4]
[5 6 7 8]]
---------
[[1 2 3 4]
[5 6 7 8]
[1 2 3 4]
[5 6 7 8]]'''
#水平方向上相加矩阵
h1 = np.zeros((2,4))
h2 = np.zeros((2,2))
np.hstack((h1,h2))
'''array([[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]])'''
用三维度阵列练习基础语法
首先利用 np.array建立指定数值的三维阵列
b = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
print(b)
'''
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]'''
接下来要来取值,当我们想要取4的时候
# []内的索引值要从外到内写
# 如果想要查到4
# 从第1个维度的第0个row > 第2个维度的第1个索引值 > 第3个维度的第2个索引值
print(b[0,1,1])
'''4'''
更进阶一点,看一下怎麽操作
# get more fancy
print(b[:,0,:]) # 第1个维度的全部 > 第2个维度的第0个索引值 > 第3个维度的全部
print("-----")
print(b[:,0,0]) # 第1个索引值的全部 > 第2个维度的第0个索引值 > 第3个维度的第0个索引值
'''
[[1 2]
[5 6]]
-----
[1 5]'''
练习取代其他值
# 先随便找一个位置
print(b[:,1,:]) # 看他长怎样
'''
[[3 4]
[7 8]]'''
#当我们发现他是2*2的阵列时,替换成随意的他值
b[:,1,:] = [[9,9],[8,8]]
print(b) #重新看b印出来会怎样
'''
[[[1 2]
[9 9]]
[[5 6]
[8 8]]]
'''
结语
NumPy 的基础语法跟练习就差不多到这里了!
对阵列运算还有NumPy也有更深一层的理解
明天就会往数学运算的方向继续练习
gogogo
>>: 前端工程师也能开发全端网页:挑战 30 天用 React 加上 Firebase 打造社群网站|Day25 阻挡会员路由
终於完赛了!最近跑去画画,附上一幅《小王子与小狐狸》,小王子里面,最喜欢的就是他们的故事,是说画画...
哈罗,今天是一周的第一天 我们来试试 Forensics 吧 放心,一定从简单的题开始 又是拚手速的...
对元素设置.text-lowercase可将所有英文字母转为小写。 <p class=&qu...
中秋节就是要烤肉阿! 台式烤肉吃腻了来换换口味吧, 韩剧及韩综中常常出现韩国烤五花肉,在家就可以吃!...
今天要来讲解TypeScript(TS)的选择性属性(Optional Properties), 在...