Numpy模块被广泛用于科学和数值计算,自然有它的强大之处,之前对于特征处理中需要进行数据列表或者矩阵拼接的时候都是自己写的函数来完成的,今天发现一个好玩的函数,不仅好玩,关键性能强大,那就是Numpy模块自带的矩阵、列表连接函数,实践一下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#!usr/bin/env python
#encoding:utf-8
from __future__ import division
'''
__Author__:沂水寒城
使用numpy模块实现矩阵的连接操作
'''
import numpy as np
def simple_test():
'''
简单的小实验
'''
sim_one,sim_two = [ 1 , 5 , 8 , 0 , 3 , 6 ],[ 11 , 5 , 8 , 0 , 3 ]
one_list = [[ 1 , 2 , 3 ],[ 1 , 2 , 1 ],[ 3 , 4 , 5 ],[ 4 , 5 , 6 ]]
two_list = [[ 5 , 6 , 7 ],[ 6 , 7 , 8 ],[ 6 , 7 , 9 ],[ 0 , 4 , 7 ],[ 4 , 6 , 0 ],[ 2 , 9 , 1 ],[ 5 , 8 , 7 ],[ 9 , 7 , 8 ],[ 3 , 7 , 9 ]]
three_list = [[ 0 , 4 , 3 , 7 ],[ 4 , 6 , 1 , 0 ],[ 2 , 5 , 9 , 1 ]]
three_list = np.array(three_list)
four_list = [[ 2 , 9 , 1 ],[ 5 , 8 , 7 ],[ 9 , 7 , 8 ],[ 3 , 7 , 9 ]]
print '对一维列表连接结果为:'
pring np.concatenate([sim_one,sim_two],axis = 0 )
print '对两个矩阵按行连接结果为:'
print np.concatenate([one_list,two_list],axis = 0 )
print '对两个矩阵按列连接结果为:'
print np.concatenate([one_list,three_list.T],axis = 1 )
print np.concatenate([one_list,four_list],axis = 1 )
if __name__ = = '__main__' :
simple_test()
|
结果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
[Decode error - output not utf - 8 ]
[Decode error - output not utf - 8 ]
[ 1 5 8 0 3 6 11 5 8 0 3 ]
对两个矩阵按行连接结果为:
[[ 1 2 3 ]
[ 1 2 1 ]
[ 3 4 5 ]
[ 4 5 6 ]
[ 5 6 7 ]
[ 6 7 8 ]
[ 6 7 9 ]
[ 0 4 7 ]
[ 4 6 0 ]
[ 2 9 1 ]
[ 5 8 7 ]
[ 9 7 8 ]
[ 3 7 9 ]]
对两个矩阵按列连接结果为:
[[ 1 2 3 0 4 2 ]
[ 1 2 1 4 6 5 ]
[ 3 4 5 3 1 9 ]
[ 4 5 6 7 0 1 ]]
[[ 1 2 3 2 9 1 ]
[ 1 2 1 5 8 7 ]
[ 3 4 5 9 7 8 ]
[ 4 5 6 3 7 9 ]]
[Finished in 0.5s ]
|
np.concatenate()函数中,第一个参数为待合并的矩阵、列表,第二个参数为0则表示是按照行连接数据,为1则表示是按照列连接数据。
从上面结果可以看到对于一维列表,axis参数可以省略,对于二维列表当axis为0时也可以省略
当axis为1时,需要注意被连接的数据矩阵行数列数需要相同才行,否则会报错:
1
|
AttributeError: 'list' object has no attribute 'T'
|
即,当axis为1时,本质上就是将矩阵以行为基准对应行的数据直接连接即可
当axis为1时,本质上就是将矩阵以列为基准将数据以此向下堆放在一起即可
以上这篇Python使用numpy模块实现矩阵和列表的连接操作方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/Together_CZ/article/details/79595844