# 导入numpy

import numpy as np

ndarray的合并

定义要使用的数据源

a = np.array([1, 1, 1])

b = np.array([2, 2, 2])

print('a', a)

print('b', b)

a [1 1 1]

b [2 2 2]

numpy.vstack()函数

语法:vstack(tup),参数是一个元组,它可将元组中指定的数组进行合并

# 将a与b合并

c = np.vstack((a, b))

print('合并结果:\n', c)

print('c的形状:\n', c.shape)

合并结果:

[[1 1 1]

[2 2 2]]

c的形状:

(2, 3)

从结果来看,两上一维数组合并后的结果是一个地维数组

numpy.hstack()函数

语法:hstack(tup),参数是一个元组

与 vstack不同的是,vstack将数组进行纵向合并,而hstack将数组进行横向合并

vstack 是 vertical stack 的缩写

hstack 是 horizontal stack 的缩写

# 将a与b合并

c = np.hstack((a, b))

print('合并结果:\n', c)

print('c的形状:\n', c.shape)

合并结果:

[1 1 1 2 2 2]

c的形状:

(6,)

可以看出,两个一维数组对象横向合并后,还是一个一维的序列,不过,元素的个数是被合并数组元素个数之和

将a或b行转成列

a = a.T

print(a)

[1 1 1]

上面的方式是无法将a进行行转列的,原因是a是个一维数组,它根本就没有列,正确的方式是:

c = a.reshape((3, 1))

print(c)

[[1]

[1]

[1]]

重新定义形状后,现在a是一个3行1列的矩阵,即一个二维数据

思考:a.reshape()是将a所指向的数组的形状改变了吗?再来查看a

print(a)

[1 1 1]

实际上,a.reshape()只是创建了一个a的副本,然后将该副本的内存地址赋给了变量c,而a变量所指向的数组还是原来的对象

newaxis属性

还有另外一组方式可以改变a的形状,也是返回一个不置可否;axis表示“轴”的意思

# 在行上增加一个维度(增加一个轴)

c = a[np.newaxis, :]

print(c)

print(c.shape)

print('-'*15)

# 在列上增加一个维度

c = a[:, np.newaxis]

print(c)

print(c.shape)

[[1 1 1]]

(1, 3)

---------------

[[1]

[1]

[1]]

(3, 1)

可以看出,返回的新对象的维度都已经发生了变化,在列方向上增加维度以后,将原先的一维数组变成了纵向的二维数组

_a = a[:, np.newaxis]

_b = b[:, np.newaxis]

c = np.hstack((_a, _b))

print(c)

[[1 2]

[1 2]

[1 2]]

也可以将同一个对象进行合并

print(np.hstack((_a, _a, _b, _b)))

[[1 1 2 2]

[1 1 2 2]

[1 1 2 2]]

concatenate()也可以将数组进行合并,通过axis可以指定合并的方向

# 横向合并

c = np.concatenate((_a, _a, _b, _b), axis=1)

# 纵向合并

d = np.concatenate((_a,_b), axis=0)

print(c)

print('-'*10)

print(d)

[[1 1 2 2]

[1 1 2 2]

[1 1 2 2]]

----------

[[1]

[1]

[1]

[2]

[2]

[2]]

ndarray的分割

定义操作的数据源

# 定义操作的数据源

a = np.arange(12).reshape((3,4))

print(a)

[[ 0 1 2 3]

[ 4 5 6 7]

[ 8 9 10 11]]

按列分割

print(a)

print('-'*15)

print(np.split(a, 2, axis=1))

[[ 0 1 2 3]

[ 4 5 6 7]

[ 8 9 10 11]]

---------------

[array([[0, 1],

[4, 5],

[8, 9]]), array([[ 2, 3],

[ 6, 7],

[10, 11]])]

split第一个参数指要被分割的数组对象,第二个参数指将该对象分成几份,第三个参数指是从横向分割还是纵向分割,这里按列将其分成了两部分,类似于一个西瓜从上切下,切成了左右两半!按列分割,指定参数axis=1

按行分割

print(a)

print('-'*15)

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

[[ 0 1 2 3]

[ 4 5 6 7]

[ 8 9 10 11]]

---------------

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

split第一个参数指要被分割的数组对象,第二个参数指将该对象分成几份,第三个参数指是从横向分割还是纵向分割,这里按行将其分成了三部分,类似于一个西瓜肚子上横切两刀,切成了上中下三部分!按行分割,指定参数axis=0

如果要将三行的数据分成2份,是分报错的,如下

print(np.split(a, 2, axis=0))

---------------------------------------------------------------------------

TypeError Traceback (most recent call last)

~\Anaconda3\envs\tensorflow\lib\site-packages\numpy\lib\shape_base.py in split(ary, indices_or_sections, axis)

534 try:

--> 535 len(indices_or_sections)

536 except TypeError:

TypeError: object of type 'int' has no len()

During handling of the above exception, another exception occurred:

ValueError Traceback (most recent call last)

in ()

----> 1 print(np.split(a, 2, axis=0))

~\Anaconda3\envs\tensorflow\lib\site-packages\numpy\lib\shape_base.py in split(ary, indices_or_sections, axis)

539 if N % sections:

540 raise ValueError(

--> 541 'array split does not result in an equal division')

542 res = array_split(ary, indices_or_sections, axis)

543 return res

ValueError: array split does not result in an equal division

如果要对数组进行不对等分割,类似于3行分成2份,则需要用到np.array_split()

print(a)

print('-'*15)

print(np.array_split(a, 2, axis=0))

[[ 0 1 2 3]

[ 4 5 6 7]

[ 8 9 10 11]]

---------------

[array([[0, 1, 2, 3],

[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]

在不对等的分割中,并不会出现1.5行这样的情况,所以会分成2行和1行

vsplit()和hsplit()

# 纵向分割

print(np.vsplit(a, 3))

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

vsplit()中的v是指Vertical的意思,指纵向的,垂直的;按行分割就是纵向分割,因为数据被分成了上下部分,类似于西瓜横切

# 横向分割

print(np.hsplit(a, 2))

[array([[0, 1],

[4, 5],

[8, 9]]), array([[ 2, 3],

[ 6, 7],

[10, 11]])]

hsplit()中的h是Horizontal的意思,指横向;按列分割就是横向的意思,因为将数据分成了左右两半,就像西瓜纵切

python ndarray合并_Python干货-Numpy的ndarray的合并与分割相关推荐

  1. python傅里叶变换库_python的numpy库和cv2库实现图像傅里叶变换

    码字不易,如果对您有所帮助,记着点赞哦! 一. 图像傅里叶变换原理: 对二维图像进行傅里叶变换用如下公式进行: 图像长M,高N.F(u,v)表示频域图像,f(x,y)表示时域图像.u的范围为[0,M- ...

  2. python中如何将两个列表进行合并_python怎样将两个list合并

    python中两个列表合并:a=[1, 2, 3, 4, 5, 6] b=['a', 'b', 'c', 'd'] 方法1: a+b 如下:>>> a=[1,2,3,4,5,6] & ...

  3. python numpy是什么_Python库Numpy里ndarray.ndim 是什么意思?

    刚学习numpy,对此查找了一下,给出下面的解释,希望能帮到题主. 1.ndim中的dim是英文dimension维度的缩写.numpy文档中对ndim的属性见下图解释. 因此对于一个数组,其shap ...

  4. python中array是什么意思_Python库Numpy里ndarray.ndim 是什么意思?

    刚学习numpy,对此查找了一下,给出下面的解释,希望能帮到题主. 1.ndim中的dim是英文dimension维度的缩写.numpy文档中对ndim的属性见下图解释. 因此对于一个数组,其shap ...

  5. python两个切片合并_Python中numpy的布尔判断、合并、切片及一般函数,通用

    各位朋友,我已开通微信公共号: 小程在线 我会把文章及时的更新到公共号上,欢迎大家的关注. #####数据的布尔值判断 import numpy as np x=np.array([1,2,3,4,5 ...

  6. python自定义随机数_python:numpy.random模块生成随机数

    简介 所谓生成随机数,即按照某种概率分布,从给定的区间内随机选取一个数.常用的分布有:均匀分布(uniform distribution),正态分布(normal distribution),泊松分布 ...

  7. python创建矩阵_python中Numpy的属性与创建矩阵

    本篇文章给大家带来的内容是关于python中Numpy的属性与创建矩阵,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. ndarray.ndim:维度 ndarray.shape:形状 ...

  8. python 数据结构包_python 中numpy科学计算工具包——基础数据结构

    认识numpy基础数据结构 # 认识数组 ar = np.array([[1,2,3,4,5],[6,7,8,9,10]]) br = [[1,2,3,4,5],[6,7,8,9,10]] print ...

  9. python阈值计算_python – 在numpy中计算超过阈值的数组值的最快方法

    使用cython可能是一个不错的选择. import numpy as np cimport numpy as np cimport cython from cython.parallel impor ...

最新文章

  1. 用JavaScript玩转计算机图形学(一)光线追踪入门
  2. 21-while里的break简单用法
  3. VIsual Studio编译OpenCV:无法打开python27_d.lib(python36_d.lib)的问题
  4. POJ 3189 Steady Cow Assignment
  5. DataGridView添加一行数据、全选、取消全选、清空数据、删除选中行
  6. 聊聊RocksDB Compact
  7. 青苹果影视系统源码v1.3.20 多功能开源影视源码
  8. 【Yarn】yarn local dirs的管理实现
  9. 衔接UI线程和管理后台工作线程的类(多线程、异步调用)[转]
  10. 【NOIP2009】【codevs1174】靶形数独
  11. 【NOIP2016提高A组模拟10.15】算循环
  12. 四菱天线怎么加强_白话天线(2)---什么是天线?
  13. ctfmon.exe频繁出错的一个解决办法
  14. 台湾医院:自主研发移动护理系统 跟软件公司说拜拜
  15. 合肥学院ACM集训队第一届暑假友谊赛 B FYZ的求婚之旅 D 计算机科学家 F 智慧码 题解...
  16. 师傅带徒弟学:Python游戏开发引擎cocos2d-python-关东升-专题视频课程
  17. 计算机怎么一键到桌面快捷键,关于添加一键返回桌面快捷键在win10电脑中的技巧...
  18. 模块化多电平变换器,MMC载波移相脉冲宽度调制
  19. 【软考】系统集成项目管理工程师(十四)项目合同管理
  20. 解决大型企业项目规划难题,「ONES Plan 项目集管理」重磅发布

热门文章

  1. Go语言Marshal序列化遇到的问题
  2. 艾瑞网·中国新经济门户 - http://www.iresearch.cn
  3. core_v5.3结构
  4. shmget报错Invalid argument
  5. 新版293tv APP 对接易支付,数据来源苹果cms,验证如意-安卓系统均可使用 交流学习研究
  6. linux服务器 硬盘安装教程,硬盘安装CentOS 6.0(超级详细图文教程) | 系统运维...
  7. android代码设置锁屏签名,如何修改android自带锁屏样式
  8. 计算机启动后花屏然后无信号,电脑花屏,显示屏突然无信号(黑一下)或者一直黑...
  9. Java类、变量、集合、数据结构基础知识
  10. java getmapping(_@getMapping与@postMapping详解