06 numpy.array 分割和合并

06 numpy.array 分割和合并

import numpy as np

numpy.array 的分割

x = np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

切成3段 [0,3) [3,7) [7,最后)

x1, x2, x3 = np.split(x, [3, 7])

x1
array([0, 1, 2])
x2
array([3, 4, 5, 6])
x3
array([7, 8, 9])

分成两段

x1, x2 = np.split(x, [5])

x1
array([0, 1, 2, 3, 4])
x2
array([5, 6, 7, 8, 9])

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

[2]只有一个表示行 ,默认基于"行" 的维度 也就是0 轴

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

在垂直方向上分割 就是有上下 两 部分 upper, lower 如果写1就是上边[1, 2, 3, 4] 下面有3行

upper, lower = np.vsplit(A, [2])

upper
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])
lower
array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])
left, right = np.hsplit(A, [2])
left
array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]])
right
array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])

那么分割数据到底有什么实际意义呢?

data = np.arange(16).reshape((4, 4))
data

以上数据可以代表4 x 4 的矩阵 ,很有可能是4个样本(4行)对于每个样本有3个特征,最后一列代表我们样本的label也就是我们的目标值,他有可能是一个类别也可能是一个连续的数,比如说表示他是猫还是狗,房子的价格等

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
X, y = np.hsplit(data, [-1])

X
array([[ 0,  1,  2],
       [ 4,  5,  6],
       [ 8,  9, 10],
       [12, 13, 14]])
y
array([[ 3],
       [ 7],
       [11],
       [15]])

得到的y是矩阵,变成向量

y[:, 0]
array([ 3,  7, 11, 15])

numpy.array 的合并

x = np.array([1, 2, 3])
y = np.array([3, 2, 1])
np.concatenate([x, y])

array([1, 2, 3, 3, 2, 1])
z = np.array([666, 666, 666])
np.concatenate([x, y, z])
array([  1,   2,   3,   3,   2,   1, 666, 666, 666])
A = np.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])

concatenate( )只能处理相同维数
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

 in ()
----> 1 np.concatenate([A, z])


ValueError: all the input arrays must have same number of dimensions

一定要进行拼接的话变化一下z的维度

np.concatenate([A, z.reshape(1, -1)])
array([[  1,   2,   3],
       [  4,   5,   6],
       [666, 666, 666]])

np.vstack 可以智能的进行拼接

np.vstack([A, z])
array([[  1,   2,   3],
       [  4,   5,   6],
       [666, 666, 666]])

有了垂直那么自然也就有了水平

B = np.full((2,2), 100)
np.hstack([A, B])
array([[  1,   2,   3, 100, 100],
       [  4,   5,   6, 100, 100]])

虽然智能,但如果传入的参数非法也是不行的A, z在垂直方向上可以合并, 但是水平不行

np.hstack([A, z])
---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

 in ()
----> 1 np.hstack([A, z])


/anaconda3/lib/python3.6/site-packages/numpy/core/shape_base.py in hstack(tup)
    286         return _nx.concatenate(arrs, 0)
    287     else:
--> 288         return _nx.concatenate(arrs, 1)
    289 
    290 


ValueError: all the input arrays must have same number of dimensions

你可能感兴趣的:(06 numpy.array 分割和合并)