python 矩阵拼接_SciPyTutorial-矩阵拼接

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更容易理解。

st203.png

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()

执行结果:

st201.png

如果步长是复数来表示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()

执行结果:

st202.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值