摘要:
第1节 数组的计算和数组的计算
1. t1 = np.arange(12)-生成数组
t2 = np.array([[1,2,3],[4,5,6]])–定义成数组
t5 = np.arange(24).reshape((2,3,4))–reshape成想要的维度
t.flatten()–拉成一维的
2. 数组与数的计算
数与数组每行每列都相加减乘除
3. 数组与数组的计算
数组和数组的计算:—行列数相等的数组是对应位置相加减乘除
—1行数组与多行多列数组,只要保证列数相同即可与每行进行相加
—1列数组与多行多列数组,只要保证行数相同即可与每列进行相加
—三维数组与二维数组的计算要依据广播原则。具体看下文。
内容:
第1节 数组的计算和数组的计算
一.数组的形状以及性质
1维数组的建立:1维数组是一个[ ],或者是(12,)中只有一个数字即是1维
import numpy as np
t1 = np.arange(12)
print("t1:%s"%t1)
print(type(t1))
print(t1.shape)
结果:
t1:[ 0 1 2 3 4 5 6 7 8 9 10 11]
<class 'numpy.ndarray'>
(12,)
二维数组的建立: 二维数组是2个[ [ ] ],或者是(2, 3)中有两个数字即是2维
t2 = np.array([[1,2,3],[4,5,6]])
print("t2:%s"%t2)
print(t2.shape)
结果:
t2:[[1 2 3]
[4 5 6]]
(2, 3)
三维数组的建立: 三维数组是3个[ [ [ ] ] ],,或者是(2,2, 3)中有3个数字即是3维
t3 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print("t3:%s"%t3)
print(t3.shape)
结果:
t3:[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]]
(2, 2, 3)
reshape的使用:
t4 = t1.reshape(3,4)
print("t4:%s"%t4)
结果:
t4:[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
三维中reshape的使用:
t5 = np.arange(24).reshape((2,3,4))
print("t5:%s"%t5)
结果:
t5:[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
注意:(2,3,4)表示的是(块,行,列)
t5.reshape(4,6)
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]])
注意:t5.reshape后有返回值,所以t5本身不变化
t.extend无返回值,所以t有变化
但:
t5 =t5.reshape(4,6)时无返回值所以是t5本身在变化
3维转变成2维和一维时的变化:
t5.reshape(24,)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23])
t5.reshape(1,24)
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23]])
注意二者的区别:t5.reshape(24,)最后得到的是一维数组,而t5.reshape(1,24)得到的是二维数组。可以从(24,)和(1,24)区分出他们分别是一维和二维数组
t5.reshape(24,1)
array([[ 0],
[ 1],
[ 2],
[ 3],
[ 4],
[ 5],
[ 6],
[ 7],
[ 8],
[ 9],
[10],
[11],
[12],
[13],
[14],
[15],
[16],
[17],
[18],
[19],
[20],
[21],
[22],
[23]])
如何将未知的数组变成一维的:
print("t5:%s"%t5)
t6 = t5.reshape((t5.shape[0]*t5.shape[1]*t5.shape[2],))
print("t6:%s"%t6)
t5.flatten()#常用
out:
t5:[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
t6:[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23])
总结:
二、数组和数的计算
数组和数的计算--2都是与每个数进行对应的加减乘除
t5=t5.reshape(4,6)
print("t5:%s"%t5)
t5+2
out:
t5:[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
array([[ 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13],
[14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25]])
t5*2
array([[ 0, 2, 4, 6, 8, 10],
[12, 14, 16, 18, 20, 22],
[24, 26, 28, 30, 32, 34],
[36, 38, 40, 42, 44, 46]])
t5/0
D:\Program Files\Anaconda3\lib\site-packages\ipykernel\__main__.py:3: RuntimeWarning: divide by zero encountered in true_divide app.launch_new_instance()
D:\Program Files\Anaconda3\lib\site-packages\ipykernel\__main__.py:3: RuntimeWarning: invalid value encountered in true_divide
app.launch_new_instance()
array([[ nan, inf, inf, inf, inf, inf],
[ inf, inf, inf, inf, inf, inf],
[ inf, inf, inf, inf, inf, inf],
[ inf, inf, inf, inf, inf, inf]])
注意:nan—not number
inf ----infinite
数组和数组的计算:---行列数相等的数组是对应位置相加减乘除
---1行数组与多行多列数组,只要保证列数相同即可与每行进行相加
---1列数组与多行多列数组,只要保证行数相同即可与每列进行相加
t5=np.array([[ 0,1,2,3 ,4,5],
[ 6,7,8,9,10,11],
[12,13,14,15,16,17],
[18,19,20,21,22,23]])
print("t5:%s"%t5)
t6 = np.arange(100,124).reshape(4,6)
t6 + t5
out:
t5:[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]]
array([[100, 102, 104, 106, 108, 110],
[112, 114, 116, 118, 120, 122],
[124, 126, 128, 130, 132, 134],
[136, 138, 140, 142, 144, 146]])
t6 * t5
out:
array([[ 0, 101, 204, 309, 416, 525],
[ 636, 749, 864, 981, 1100, 1221],
[1344, 1469, 1596, 1725, 1856, 1989],
[2124, 2261, 2400, 2541, 2684, 2829]])
t6/t5
out:
D:\Program Files\Anaconda3\lib\site-packages\ipykernel\__main__.py:1: RuntimeWarning: divide by zero encountered in true_divide
if __name__ == '__main__':
array([[ inf, 101. , 51. , 34.33333333,
26. , 21. ],
[ 17.66666667, 15.28571429, 13.5 , 12.11111111,
11. , 10.09090909],
[ 9.33333333, 8.69230769, 8.14285714, 7.66666667,
7.25 , 6.88235294],
[ 6.55555556, 6.26315789, 6. , 5.76190476,
5.54545455, 5.34782609]])
t7 = np.arange(0,6)
t7
out:array([0, 1, 2, 3, 4, 5])
t5+t7
out:
array([[ 0, 2, 4, 6, 8, 10],
[ 6, 8, 10, 12, 14, 16],
[12, 14, 16, 18, 20, 22],
[18, 20, 22, 24, 26, 28]])---可见是t7与t5的每行进行相加
t8 = np.arange(4).reshape((4,1))
out:
array([[0],
[1],
[2],
[3]])
t5 -t8
out:
array([[ 0, 1, 2, 3, 4, 5],
[ 5, 6, 7, 8, 9, 10],
[10, 11, 12, 13, 14, 15],
[15, 16, 17, 18, 19, 20]])
总结:
注意:shape(3,3,2)是可以和shape(3,3)计算的,原因是广播原则,可以按视频中老师讲的按照魔方来理解:
由上图可知,shape(3,3,2)组成的块是可以构成一个3X3数组的,只要有构成了一个3X3数组就是可以计算的
重点:二维/一维:t5-t7-只有在某一维度上(行或者列)相同才可以计算
三维的:只要每个方向上都不一样才不可以计算,从末尾端数起只要保证有两个方向上一样就可以计算,如:shape(3,3,2)是可以和shape(3,3)、shape(3,2)计算的,只不过计算的是不同的矩阵方向,shape(3,2)是shape(3,3,2)的后两个维度一样的,shape(3,3)是可以和shape(3,3,2)前两个维度一样的。
下载链接
对应课件下载视频
链接:https://pan.baidu.com/s/1hJRWKOE2Mus-hb90woa2Ew
提取码:4wjo
复制这段内容后打开百度网盘手机App,操作更方便哦