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

【06|06 numpy.array 分割和合并】在垂直方向上分割 就是有上下 两 部分 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 = https://www.it610.com/article/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( )只能处理相同维数
---------------------------------------------------------------------------
ValueErrorTraceback (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])

---------------------------------------------------------------------------ValueErrorTraceback (most recent call last) in () ----> 1 np.hstack([A, z])/anaconda3/lib/python3.6/site-packages/numpy/core/shape_base.py in hstack(tup) 286return _nx.concatenate(arrs, 0) 287else: --> 288return _nx.concatenate(arrs, 1) 289 290 ValueError: all the input arrays must have same number of dimensions

    推荐阅读