数据分析学习-第四课 numpy数组(第1节)(有相应课件视频下载链接在文末)

摘要:

第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,操作更方便哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值