numpy.array 合并和分割

Posted zry-yt

tags:

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

# 导包
import numpy as np

numpy.array 的合并

.concatenate()

  一维数组

x = np.array([1, 2, 3])   # array([1, 2, 3])
y = np.array([3, 2, 1])   # array([3, 2, 1])
np.concatenate([x, y])   # array([1, 2, 3, 3, 2, 1])
z = np.array([666, 666, 666])  # array([666, 666, 666])
np.concatenate([x, y, z]) 
"""
array([  1,   2,   3,   3,   2,   1, 666, 666, 666])
"""

  二维数组

  .concatenate((a,b,c,...),axis=0) :默认情况下,axis=0可以不写,axis是拼接方向,拼接方向可以理解为拼接完成后数量发生变化的方向,0为横轴,1为纵轴

    axis=0:对应列的数组进行拼接,拼接方向为横轴,需要纵轴结构相同

    axis=1:对应行的数组进行拼接,拼接方向为纵轴,需要横轴结构相同

A = np.array([[1, 2, 3], [4, 5, 6]]) 
"""
array([[1, 2, 3],
       [4, 5, 6]])
"""
np.concatenate([A, A])
"""
array([[1, 2, 3],
       [4, 5, 6],
       [1, 2, 3],
       [4, 5, 6]])
"""
np.concatenate([A, A], axis=1) 
"""
array([[1, 2, 3, 1, 2, 3],
       [4, 5, 6, 4, 5, 6]])
"""
np.concatenate([A, z])  # 错误
np.concatenate([A, z.reshape(1, -1)]) 
"""
array([[  1,   2,   3],
       [  4,   5,   6],
       [666, 666, 666]])
"""

.hstack()

  函数原型:numpy.hstack(tup) ,参数tup可以是元组,列表,或者numpy数组,阵列必须具有相同的形状,除了对应于轴的维度(默认情况下,第一个),返回结果为numpy的数组

  等价于  numpy.concatenate(tup,axis=1)
a=[1,2,3]
b=[4,5,6]
np.hstack((a,b))  # array([1, 2, 3, 4, 5, 6])

 

a=[[1],[2],[3]]
b=[[1],[2],[3]]
c=[[1],[2],[3]]
d=[[1],[2],[3]]
np.hstack((a,b,c,d))
"""
array([[1, 1, 1, 1],
       [2, 2, 2, 2],
       [3, 3, 3, 3]])
"""

  它其实就是水平(按列顺序)把数组给堆叠起来

.vstack()

  函数原型:numpy.vstack(tup)  ,参数tup可以是元组,列表,或者numpy数组,返回结果为numpy的数组

  等价于:  np.concatenate(tup,axis=0) 
a=[1,2,3]
b=[4,5,6]
np.vstack((a,b))
"""
array([[1, 2, 3],
       [4, 5, 6]])
"""

 

a=[[1],[2],[3]]
b=[[1],[2],[3]]
c=[[1],[2],[3]]
d=[[1],[2],[3]]
np.vstack((a,b,c,d))
"""
array([[1],
       [2],
       [3],
       [1],
       [2],
       [3],
       [1],
       [2],
       [3],
       [1],
       [2],
       [3]])
"""

  它是垂直(按照行顺序)的把数组给堆叠起来

numpy.array 的分割

split

  split(ary, indices_or_sections, axis=0):把一个数组从左到右按顺序切分 

  ary:要切分的数组 
  indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左闭右开) 
  axis:沿着哪个维度进行切向,默认为0,横向切分;为1时,纵向切分

x = np.arange(10)  # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x1, x2, x3, x4, x5 = np.split(x, [2, 4, 5, 7])
"""
x1  -->  array([0, 1])
x2  -->  array([2, 3])
x3  -->  array([4])
x4  -->  array([5, 6])
x5  -->  array([7, 8, 9])
"""

 

A = np.arange(16).reshape(4, 4) 
A1, A2 = np.split(A, [2])
"""
A1  -->  array([[0, 1, 2, 3],
            [4, 5, 6, 7]])
A2  -->  array([[ 8,  9, 10, 11],
            [12, 13, 14, 15]])
"""

A1, A2 = np.split(A, [2], axis=1)
"""
A1  -->  array([[ 0,  1],
             [ 4,  5],
            [ 8,  9],
            [12, 13]])
A2  -->  array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])
"""

hsplit

  通过指定要返回的相同shape的array的数量,类似于axis = 1

vsplit

  vsplit沿着垂直轴分割,类似于axis = 0

upper, lower = np.vsplit(A, [2])
"""
upper  -->  array([[0, 1, 2, 3],
               [4, 5, 6, 7]])
"""

left, right = np.hsplit(A, [2]) 
"""
left  -->  array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]])
"""

 

以上是关于numpy.array 合并和分割的主要内容,如果未能解决你的问题,请参考以下文章

创建特征向量以对空中图像中的片段进行分类

numpy.array

机器学习初入门01-numpy的基础用法

Java实现文件分割和文件合并实例

Java-使用IO流对大文件进行分割和分割后的合并

Java-使用IO流对大文件进行分割和分割后的合并