numpy 笔记:改变形态

Posted UQI-LIUWJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了numpy 笔记:改变形态相关的知识,希望对你有一定的参考价值。

1 添加维度

原始数组如下:

import numpy as np

a = np.array([1,2,3,4,5,6])

a.shape
#(6,)

1.1 np.newaxis

 1.2 None

 1.3 reshape

 

 1.4 np.expand_dims

expand_dims必须添加axis 参数,

axis=x表示新增加的维度是第x个维度 

2 减少维度

减少维度除了用reshape之外,还可以使用别的方法

2.1 squeeze

减少那些维度 shape 上为 1 的维度

只能减少那些维度 shape 上为 1 的维度。因为减掉这个维度,数据结构上是没有变化的。

3 拼接矩阵

所用到的数组:

a=np.array([[1,2,3],[7,8,9]])
b=np.array([[4,5,6],[1,2,3]])

a,b
'''
(array([[1, 2, 3],
        [7, 8, 9]]),
 array([[4, 5, 6],
        [1, 2, 3]]))
'''


d=np.array([7,8,9])
e=np.array([1,2,3])
d,e
'''
(array([7, 8, 9]), array([1, 2, 3]))
'''

 3.1 按行连接

3.1.1 c_

np.c_[a,b]
'''
array([[1, 2, 3, 4, 5, 6],
       [7, 8, 9, 1, 2, 3]])
'''

np.c_[d,e]
'''
array([[7, 1],
       [8, 2],
       [9, 3]])
'''

3.1.2  hstack

多行的时候,和c_是一样的

对于单行的问题,hstack 里面是把行向量当作一行看的,c_是当作一列

np.hstack((a,b))
'''
array([[1, 2, 3, 4, 5, 6],
       [7, 8, 9, 1, 2, 3]])

'''

np.hstack((d,e))
'''
array([7, 8, 9, 1, 2, 3])
'''

3.1.3 column_stack

和c_是一样的

np.column_stack((a,b))
'''
array([[1, 2, 3, 4, 5, 6],
       [7, 8, 9, 1, 2, 3]])
'''


np.column_stack((d,e))
'''
array([[7, 1],
       [8, 2],
       [9, 3]])
'''

3.1.4 concatenate

np.concatenate((a,b),axis=1)
'''
array([[1, 2, 3, 4, 5, 6],
       [7, 8, 9, 1, 2, 3]])
'''

np.concatenate((d,e))
#array([7, 8, 9, 1, 2, 3])

3.2 按列排序

3.2.1 r_

np.r_[a,b]
'''
array([[1, 2, 3],
       [7, 8, 9],
       [4, 5, 6],
       [1, 2, 3]])
'''

np.r_[d,e]
'''
array([7, 8, 9, 1, 2, 3])
'''

3.2.2 vstack

np.vstack((a,b)) 
'''
array([[1, 2, 3],
       [7, 8, 9],
       [4, 5, 6],
       [1, 2, 3]])
'''

np.vstack((d,e))
'''
array([[7, 8, 9],
       [1, 2, 3]])
'''

3.3.3 row_stack

np.row_stack((a,b)) 
'''
array([[1, 2, 3],
       [7, 8, 9],
       [4, 5, 6],
       [1, 2, 3]])
'''

np.row_stack((d,e))

'''
array([[7, 8, 9],
       [1, 2, 3]])
'''

3.3.4 concatenate

np.concatenate((a,b),axis=0)
'''
array([[1, 2, 3],
       [7, 8, 9],
       [4, 5, 6],
       [1, 2, 3]])
'''

4 拆解

a = np.array(
[[ 1, 11, 2, 22],
 [ 3, 33, 4, 44],
 [ 5, 55, 6, 66],
 [ 7, 77, 8, 88]]
)

4.1 水平拆解 vsplit

np.vsplit(a, indices_or_sections=2)
'''
[array([[ 1, 11,  2, 22],
        [ 3, 33,  4, 44]]),
 array([[ 5, 55,  6, 66],
        [ 7, 77,  8, 88]])]
'''

#拆分成[0:2) [2:
np.vsplit(a, indices_or_sections=[2,3])

'''
[array([[ 1, 11,  2, 22],
        [ 3, 33,  4, 44]]),
 array([[ 5, 55,  6, 66]]),
 array([[ 7, 77,  8, 88]])]
'''
# 拆分成[0:2),[2:3),[3:)

4.2 垂直拆解 hsplit

a = np.array(
[[ 1, 11, 2, 22],
 [ 3, 33, 4, 44],
 [ 5, 55, 6, 66],
 [ 7, 77, 8, 88]]
)
np.hsplit(a, indices_or_sections=2)
'''
[array([[ 1, 11],
        [ 3, 33],
        [ 5, 55],
        [ 7, 77]]),
 array([[ 2, 22],
        [ 4, 44],
        [ 6, 66],
        [ 8, 88]])]
'''
#[0:2),[2,)
np.hsplit(a, indices_or_sections=[2,3])
'''
[array([[ 1, 11],
        [ 3, 33],
        [ 5, 55],
        [ 7, 77]]),
 array([[2],
        [4],
        [6],
        [8]]),
 array([[22],
        [44],
        [66],
        [88]])]
'''
#分成[0:2),[2:3),[3:)

4.3 综合切法 split

a = np.array(
[[ 1, 11, 2, 22],
 [ 3, 33, 4, 44],
 [ 5, 55, 6, 66],
 [ 7, 77, 8, 88]]
)
np.split(a, indices_or_sections=2,axis=0)
'''
[array([[ 1, 11,  2, 22],
        [ 3, 33,  4, 44]]),
 array([[ 5, 55,  6, 66],
        [ 7, 77,  8, 88]])]
'''

#切完之后是 [[0:2)][.....] [[2:)][.....]
np.split(a, indices_or_sections=2,axis=1)
'''
[array([[ 1, 11],
        [ 3, 33],
        [ 5, 55],
        [ 7, 77]]),
 array([[ 2, 22],
        [ 4, 44],
        [ 6, 66],
        [ 8, 88]])]
'''

#切完之后是 [.....][[0:2)] [.....][[2:)]

以上是关于numpy 笔记:改变形态的主要内容,如果未能解决你的问题,请参考以下文章

Numpy笔记 · Permutation

Numpy笔记 · Permutation

NumPy学习笔记:3更加复杂的数组

opencv的学习笔记4

python numpy片段

OpenCV学习笔记——形态学梯度操作