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
推荐阅读
- 急于表达——往往欲速则不达
- 第三节|第三节 快乐和幸福(12)
- 20170612时间和注意力开销记录
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- 对称加密和非对称加密的区别
- 眼光要放高远
- 樱花雨
- 前任
- 2020-04-07vue中Axios的封装和API接口的管理
- 烦恼和幸福