首页Python【Python数据分析】6...

【Python数据分析】6.数组算术与变换操作


本系列文章配套代码获取有以下三种途径:

  • 可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):

https://returu.github.io/Python_Data_Analysis/lab/index.html
链接:https://pan.baidu.com/s/1MYkeYeVAIRqbxezQECHwcA?pwd=mnsj 提取码:mnsj
  • 前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Data_Analysis

根据《Python for Data Analysis 3rd Edition》翻译整理

—————-————————————-

1.数组算术:

ndarray数组允许进行批量操作而无需使用for循环,因此更加简便,这种特性也被称为向量化。任何两个等尺寸之间的算术操作都应用逐元素操作的方式进行。

 1>>> import numpy as np
2
3>>> arr1 = np.array([[1,2,3,4],[9,8,7,6]])
4>>> arr1
5array([[1, 2, 3, 4],
6       [9, 8, 7, 6]]
)
7
8>>> arr2 = np.array([[4,3,2,1],[6,7,8,9]])
9>>> arr2
10array([[4, 3, 2, 1],
11       [6, 7, 8, 9]]
)
12
13>>> arr1 + arr2
14array([[ 5,  5,  5,  5],
15       [15, 15, 15, 15]]
)
16
17>>> arr1 * arr2
18array([[ 4,  6,  6,  4],
19       [54, 56, 56, 54]]
)
20
21>>> 1 / arr1
22array([[1.        , 0.5       , 0.33333333, 0.25      ],
23       [0.11111111, 0.125     , 0.14285714, 0.16666667]]
)
24
25>>> arr2 * 0.8
26array([[3.2, 2.4, 1.6, 0.8],
27       [4.8, 5.6, 6.4, 7.2]]
)

2.数组的变换:

  • ndarray数组的维度变换主要包括以下几种方法:
函数方法
说明
.reshape(shape) 不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape) 与.reshape()功能一致,但修改原数组
.swapaxes(ax1,ax2) 将数组n个维度中两个维度进行调换
.flatten() 对数组进行降维,返回折叠后的一维数组,原数组不变


 1>>> arr = np.array([[[12,11,10] , [9,8,7]] , [[6,5,4] , [3,2,1]]])
2>>> arr
3array([[[12, 11, 10],
4        [ 9,  8,  7]]
,
5
6       [[ 6,  5,  4],
7        [ 3,  2,  1]]
])
8>>> arr.shape
9(223)
10
11# reshape(shape)——不改变数组元素,返回一个shape形状的数组,原数组不变
12>>> arr.reshape((2,6))
13array([[12, 11, 10,  9,  8,  7],
14       [ 6,  5,  4,  3,  2,  1]]
)
15>>> arr
16array([[[12, 11, 10],
17        [ 9,  8,  7]]
,
18
19       [[ 6,  5,  4],
20        [ 3,  2,  1]]
])
21
22# resize(shape)——与reshape()功能一致,但修改原数组
23>>> arr.resize((3,2,2))
24>>> arr
25array([[[12, 11],
26        [10,  9]]
,
27
28       [[ 8,  7],
29        [ 6,  5]]
,
30
31       [[ 4,  3],
32        [ 2,  1]]
])
33>>> arr.shape
34(322)
35
36# swapaxes(ax1,ax2)——将数组n个维度中两个维度进行调换
37>>> arr.swapaxes(0,1)
38array([[[12, 11],
39        [ 8,  7],
40        [ 4,  3]]
,
41
42       [[10,  9],
43        [ 6,  5],
44        [ 2,  1]]
])
45>>> arr.swapaxes(0,1).shape
46(232)
47
48# flatten()——对数组进行降维,返回折叠后的一维数组,原数组不变
49>>> arr.flatten()
50array([121110,  9,  8,  7,  6,  5,  4,  3,  2,  1])
51>>> arr
52array([[[12, 11],
53        [10,  9]]
,
54
55       [[ 8,  7],
56        [ 6,  5]]
,
57
58       [[ 4,  3],
59        [ 2,  1]]
])
  • ndarray数组向列表的转换:

1>>> arr = np.array([[1,2,3,4],[9,8,7,6]])
2>>> arr
3array([[1, 2, 3, 4],
4       [9, 8, 7, 6]]
)
5
6>>> arr.tolist()
7[[1, 2, 3, 4], [9, 8, 7, 6]]

3.数组转置与换轴:

转置是一种特殊的数据重组形式,可以返回底层数据的视图而不需要复制任何内容。
数组拥有transpose方法,也有特殊的T属性。
 1>>> arr = np.arange(15).reshape((3,5))
2>>> arr
3array([[ 0,  1,  2,  3,  4],
4       [ 5,  6,  7,  8,  9],
5       [1011121314]])
6
7>>> arr.transpose
8<function ndarray.transpose>
9
10>>> arr.T
11array([[ 0,  510],
12       [ 1,  611],
13       [ 2,  712],
14       [ 3,  813],
15       [ 4,  914]])
16
17>>> arr.T.shape
18(53)

对于更高纬度的数组,transpose方法可以接受包含轴编号的元组,用于转置轴。

 1>>> arr = np.arange(24).reshape((2,3,4))
2>>> arr
3array([[[ 0,  1,  2,  3],
4        [ 4,  5,  6,  7],
5        [ 8,  9, 10, 11]]
,
6
7       [[12, 13, 14, 15],
8        [16, 17, 18, 19],
9        [20, 21, 22, 23]]
])
10
11# 下面的操作是将原来的第三个轴变为第一个,原来的第一个轴变为第二个轴,原来的第二个轴变为第三个轴
12>>> arr.transpose((2,0,1))
13array([[[ 0,  4,  8],
14        [12, 16, 20]]
,
15
16       [[ 1,  5,  9],
17        [13, 17, 21]]
,
18
19       [[ 2,  6, 10],
20        [14, 18, 22]]
,
21
22       [[ 3,  7, 11],
23        [15, 19, 23]]
])
24
25>>> arr.transpose((2,0,1)).shape
26(423)
27
28>>> arr.T
29array([[[ 0, 12],
30        [ 4, 16],
31        [ 8, 20]]
,
32
33       [[ 1, 13],
34        [ 5, 17],
35        [ 9, 21]]
,
36
37       [[ 2, 14],
38        [ 6, 18],
39        [10, 22]]
,
40
41       [[ 3, 15],
42        [ 7, 19],
43        [11, 23]]
])
44
45>>> arr.T.shape
46(432)


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments