2. Scipy Tutorial-常用函数
本章主要介绍一些Scipy里的常用的函数,例如构造数组的函数。
2.1 拼接array数组
在scipy里常先用numpy模块构造一些array数组,然后对这些数组进行相应的计算和算法处理。
- concatenate函数。连接若干个序列数据成为一个array数组。
import numpy as np
a1 = np.concatenate(([3], [8] * 4, np.arange(1, 6)))
print a1
程序执行结果:
[3 8 8 8 8 1 2 3 4 5]
concatenate函数有个形参axis,如果没有使用这个参数(axis = None)函数执行结果是一个1维的数组。如果指定了axis的值,那么参与连接的两个array数组按轴来对齐。
对于axis轴的作用的理解: 1). axis使用0值表示沿着每一列或行标签\索引值向下执行方法 2). axis使用1值表示沿着每一行或者列标签模向执行对应的方法
import numpy as np
a1 = np.concatenate(([3], [8] * 4, np.arange(1, 6)))
print a1
x1 = np.array([[1,2,3],[4,5,6]])
x2 = np.array([[11,12,13],[14,15,16]])
#print x1
#print x2
a11 = np.concatenate((x1,x2), axis = 0)
print a11
a12 = np.concatenate((x1,x2), axis = 1)
print a12
a13 = np.concatenate((x1,x2), axis = None)
print a13
程序执行结果:
[3 8 8 8 8 1 2 3 4 5]
[[ 1 2 3] # axis = 0
[ 4 5 6]
[11 12 13]
[14 15 16]] # axis = 1
[[ 1 2 3 11 12 13]
[ 4 5 6 14 15 16]]
[ 1 2 3 4 5 6 11 12 13 14 15 16] # axis = None
- r_命令,0轴方向(向下行变)连接各个array数组成更大的数组,即最外层的元素个数增加。作用和concatenate函数差不多。
import numpy as np
a1 = np.concatenate(([3], [8] * 4, np.arange(1, 6)))
print a1
a2 = np.r_[[3], [8] * 4, np.arange(1, 6)]
print a2
程序执行结果:
[3 8 8 8 8 1 2 3 4 5]
- c_命令。要求列数相同,1轴方向(向右列变)连接各个数组,即内层的元素个数增加。
import numpy as np
a1 = np.concatenate(([3], [8] * 4, np.arange(1, 6)))
print a1
a2 = np.r_[[3], [8] * 4, np.arange(1, 6)]
print a2
a3 = np.c_[[3, 4, 5, 6, 7], [8] * 5, np.arange(1, 6)]
print a3
程序执行结果:
[3 8 8 8 8 1 2 3 4 5] # a1
[3 8 8 8 8 1 2 3 4 5] # a2
[[3 8 1] # a3
[4 8 2]
[5 8 3]
[6 8 4]
[7 8 5]]
- r_和c_官方文档里说r_是沿第一轴first axis连接、c_是沿second axis,对于一个具体的数组有0、1、2、...等轴,那么0轴为fisrt axis,1轴为second axis。难懂,更多情况下使用vstack和hstack更容易理解。
import numpy as np
x1 = np.array([[1,2,3],[4,5,6]])
x2 = np.array([[11,12,13],[14,15,16]])
x3 = np.array([[21,22,23],[24,25,26]])
x4 = np.array([[31,32,33],[34,35,36]])
a2 = np.r_[[3,4,5,6], [8] * 4, np.arange(1, 5)]
print a2
a2 = np.c_[[3,4,5,6], [8] * 4, np.arange(1, 5)]
print a2
a21 = np.r_[x1, x2, x3,x4]
print a21
a21 = np.c_[x1, x2, x3,x4]
print a21
print "*" * 20
x1 = np.array(np.arange(1,25).reshape((2, 4, 3)))
x2 = np.array(np.arange(101,125).reshape((2, 4, 3)))
x3 = np.array(np.arange(201,225).reshape((2, 4, 3)))
x4 = np.array(np.arange(301,325).reshape((2, 4, 3)))
print "x1"
print x1.shape,np.shape(x1)
print x1
print "*" * 20
print "a2r"
a2r = np.r_[x1, x2, x3,x4]
print a2r.shape
print a2r
print "*" * 20
print "a2c"
a2c = np.c_[x1, x2, x3,x4]
print a2c.shape
print a2c
程序执行结果:
[3 4 5 6 8 8 8 8 1 2 3 4]
[[3 8 1]
[4 8 2]
[5 8 3]
[6 8 4]]
[[ 1 2 3]
[ 4 5 6]
[11 12 13]
[14 15 16]
[21 22 23]
[24 25 26]
[31 32 33]
[34 35 36]]
[[ 1 2 3 11 12 13 21 22 23 31 32 33]
[ 4 5 6 14 15 16 24 25 26 34 35 36]]
********************
x1
(2, 4, 3) (2, 4, 3)
[[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[13 14 15]
[16 17 18]
[19 20 21]
[22 23 24]]]
********************
a2r
(8, 4, 3)
[[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[ 10 11 12]]
[[ 13 14 15]
[ 16 17 18]
[ 19 20 21]
[ 22 23 24]]
[[101 102 103]
[104 105 106]
[107 108 109]
[110 111 112]]
[[113 114 115]
[116 117 118]
[119 120 121]
[122 123 124]]
[[201 202 203]
[204 205 206]
[207 208 209]
[210 211 212]]
[[213 214 215]
[216 217 218]
[219 220 221]
[222 223 224]]
[[301 302 303]
[304 305 306]
[307 308 309]
[310 311 312]]
[[313 314 315]
[316 317 318]
[319 320 321]
[322 323 324]]]
********************
a2c
(2, 4, 12)
[[[ 1 2 3 101 102 103 201 202 203 301 302 303]
[ 4 5 6 104 105 106 204 205 206 304 305 306]
[ 7 8 9 107 108 109 207 208 209 307 308 309]
[ 10 11 12 110 111 112 210 211 212 310 311 312]]
[[ 13 14 15 113 114 115 213 214 215 313 314 315]
[ 16 17 18 116 117 118 216 217 218 316 317 318]
[ 19 20 21 119 120 121 219 220 221 319 320 321]
[ 22 23 24 122 123 124 222 223 224 322 323 324]]]
- vstack和hstack分别为竖排(行数增加、列数不变)、横排(行数不变、列数增加)。
import numpy as np
x1 = np.array([[1,2,3],[4,5,6]])
x2 = np.array([[11,12,13],[14,15,16]])
a3 = np.hstack((x1, x2))
print a3
a4 = np.vstack((x1, x2))
print a4
a5 = np.hstack(([3, 4, 5, 6, 7], [8] * 5, np.arange(1, 6)))
print a5
a6 = np.vstack(([3, 4, 5, 6, 7], [8] * 5, np.arange(1, 6)))
print a6
程序执行结果
[[ 1 2 3 11 12 13]
[ 4 5 6 14 15 16]] #a3
[[ 1 2 3]
[ 4 5 6]
[11 12 13]
[14 15 16]]#a4
[3 4 5 6 7 8 8 8 8 8 1 2 3 4 5] #a5
[[3 4 5 6 7]
[8 8 8 8 8]
[1 2 3 4 5]] #a6
2.2 mgrid函数
mgrid函数可以产生2D平面上的坐标点数据组成的矩阵。
import numpy as np
import matplotlib.pyplot as plt
a = np.mgrid[0:3, 3:7]
print "a[0]\n", a[0]
print "a[1]\n", a[1]
plt.scatter(a[0], a[1])
plt.show()
执行结果: 如果步长是复数来表示nj,意思是平均取n个点并含有stop即终点。
import numpy as np
import matplotlib.pyplot as plt
a = np.mgrid[0:3:7j, 3:7]
print "a[0]\n", a[0]
print "a[1]\n", a[1]
plt.scatter(a[0], a[1])
plt.show()
执行结果: