Numpy的学习5-array的分割

Posted simon-idea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Numpy的学习5-array的分割相关的知识,希望对你有一定的参考价值。

import numpy as np
A = np.arange(12).reshape((3, 4))
print(A)
"""
array([[ 0,  1,  2,  3],
    [ 4,  5,  6,  7],
    [ 8,  9, 10, 11]])
"""

#纵向分割

print(np.split(A, 2, axis=1))
"""
[array([[0, 1],
        [4, 5],
        [8, 9]]), array([[ 2,  3],
        [ 6,  7],
        [10, 11]])]
"""

# 横向分割

print(np.split(A, 3, axis=0))

# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]

# 错误的分割
#
# 范例的Array只有4列,只能等量对分,因此输入以上程序代码后Python就会报错。
# 可以看到split(矩阵,分割单位中元素的个数,分割方向)-》0表示的是横向,1表示的纵向

print(np.split(A, 3, axis=1))

# ValueError: array split does not result in an equal division

# 为了解决这种情况, 我们会有下面这种方式.


# 不等量的分割

# 在机器学习时经常会需要将数据做不等量的分割,因此解决办法为np.array_split()
# 为什么机器学习的时候会做不等量的分隔??
print(np.array_split(A, 3, axis=1))
"""
[array([[0, 1],
        [4, 5],
        [8, 9]]), array([[ 2],
        [ 6],
        [10]]), array([[ 3],
        [ 7],
        [11]])]
        可以看到第一个为矩阵3行x2列   第二个为矩阵 3x1 第三个为矩阵 3x1
"""

# 其他的分割方式
#
# 在Numpy里还有np.vsplit()与横np.hsplit()方式可用。
# v表示的是vertical h表示的是horizontal

print(np.vsplit(A, 3)) #等于 print(np.split(A, 3, axis=0))

# [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]


print(np.hsplit(A, 2)) #等于 print(np.split(A, 2, axis=1))
"""
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
        [ 6,  7],
        [10, 11]])]
"""

 分割的作用

在卷积神经网络中 卷积的过程就要用到array的分割,因为是一小块一小块的卷积的

np.hsplit(A, 2) 等于 np.split(A, 2, axis=1) vertical
np.vsplit(A, 3) 等于 np.split(A, 3, axis=0) horizontal
 

以上是关于Numpy的学习5-array的分割的主要内容,如果未能解决你的问题,请参考以下文章

numpy基础

numpy+pandas 基础学习

NumPy学习(索引和切片,合并,分割,copy与deep copy)

numpy之ones,array,asarray

Numpy 均值无法获取其他轴

Numpy 目标检测数据集 按各类别的边界框数量分割