对numpy中轴与维度的理解


Posted in Python onApril 18, 2018

NumPy's main object is the homogeneous multidimensional array. It is a table of elements (usually numbers), all of the same type, indexed by a tuple of positive integers. In NumPy dimensions are called axes. The number of axes is rank.

For example, the coordinates of a point in 3D space [1, 2, 1] is an array of rank 1, because it has one axis. That axis has a length of 3. In the example pictured below, the array has rank 2 (it is 2-dimensional). The first dimension (axis) has a length of 2, the second dimension has a length of 3.

[[ 1., 0., 0.],
 [ 0., 1., 2.]]

ndarray.ndim

数组轴的个数,在python的世界中,轴的个数被称作秩

>> X = np.reshape(np.arange(24), (2, 3, 4))
  # 也即 2 行 3 列的 4 个平面(plane)
>> X
array([[[ 0, 1, 2, 3],
    [ 4, 5, 6, 7],
    [ 8, 9, 10, 11]],
    [[12, 13, 14, 15],
    [16, 17, 18, 19],
    [20, 21, 22, 23]]])

shape函数是numpy.core.fromnumeric中的函数,它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度。

shape(x)

(2,3,4)

shape(x)[0]

2

或者

x.shape[0]

2

再来分别看每一个平面的构成:

>> X[:, :, 0]
array([[ 0, 4, 8],
    [12, 16, 20]])
>> X[:, :, 1]
array([[ 1, 5, 9],
    [13, 17, 21]])
>> X[:, :, 2]
array([[ 2, 6, 10],
    [14, 18, 22]])
>> X[:, :, 3]
array([[ 3, 7, 11],
    [15, 19, 23]])

也即在对 np.arange(24)(0, 1, 2, 3, ..., 23) 进行重新的排列时,在多维数组的多个轴的方向上,先分配最后一个轴(对于二维数组,即先分配行的方向,对于三维数组即先分配平面的方向)

reshpae,是数组对象中的方法,用于改变数组的形状。

二维数组

#!/usr/bin/env python 
# coding=utf-8 
import numpy as np 
 
a=np.array([1, 2, 3, 4, 5, 6, 7, 8]) 
print a 
d=a.reshape((2,4)) 
print d

对numpy中轴与维度的理解

三维数组

#!/usr/bin/env python 
# coding=utf-8 
import numpy as np 
 
a=np.array([1, 2, 3, 4, 5, 6, 7, 8]) 
print a 
f=a.reshape((2, 2, 2)) 
print f

对numpy中轴与维度的理解

形状变化的原则是数组元素不能发生改变,比如这样写就是错误的,因为数组元素发生了变化。

#!/usr/bin/env python 
# coding=utf-8 
import numpy as np 
 
a=np.array([1, 2, 3, 4, 5, 6, 7, 8]) 
print a 
print a.dtype 
e=a.reshape((2,2)) 
print e

对numpy中轴与维度的理解

注意:通过reshape生成的新数组和原始数组公用一个内存,也就是说,假如更改一个数组的元素,另一个数组也将发生改变。

#!/usr/bin/env python 
# coding=utf-8 
import numpy as np 
 
a=np.array([1, 2, 3, 4, 5, 6, 7, 8]) 
print a 
e=a.reshape((2, 4)) 
print e 
a[1]=100 
print a 
print e

对numpy中轴与维度的理解

Python中reshape函数参数-1的意思

a=np.arange(0, 60, 10)
>>>a
array([0,10,20,30,40,50])
>>>a.reshape(-1,1)
array([[0],
[10],
[20],
[30],
[40],
[50]])

如果写成a.reshape(1,1)就会报错

ValueError:cannot reshape array of size 6 into shape (1,1)

>>> a = np.array([[1,2,3], [4,5,6]])
>>> np.reshape(a, (3,-1)) # the unspecified value is inferred to be 2
array([[1, 2],
    [3, 4],
    [5, 6]])

-1表示我懒得计算该填什么数字,由python通过a和其他的值3推测出来。

# 下面是两张2*3大小的照片(不知道有几张照片用-1代替),如何把所有二维照片给摊平成一维
>>> image = np.array([[[1,2,3], [4,5,6]], [[1,1,1], [1,1,1]]])
>>> image.shape
(2, 2, 3)
>>> image.reshape((-1, 6))
array([[1, 2, 3, 4, 5, 6],
    [1, 1, 1, 1, 1, 1]])

以上这篇对numpy中轴与维度的理解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
Dec 08 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
Jun 07 Python
python模块之sys模块和序列化模块(实例讲解)
Sep 13 Python
python机器学习理论与实战(一)K近邻法
Jan 28 Python
高效使用Python字典的清单
Apr 04 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
May 21 Python
Django框架模板注入操作示例【变量传递到模板】
Dec 19 Python
python将print输出的信息保留到日志文件中
Sep 27 Python
使用PyOpenGL绘制三维坐标系实例
Dec 24 Python
解决Python数据可视化中文部分显示方块问题
May 16 Python
Python selenium环境搭建实现过程解析
Sep 08 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
Feb 16 Python
Python实现购物车购物小程序
Apr 18 #Python
详谈python中冒号与逗号的区别
Apr 18 #Python
python logging日志模块以及多进程日志详解
Apr 18 #Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
Apr 18 #Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
Apr 18 #Python
浅谈numpy数组中冒号和负号的含义
Apr 18 #Python
对python numpy数组中冒号的使用方法详解
Apr 17 #Python
You might like
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
php微信开发之自定义菜单实现
2016/11/18 PHP
Laravel数据库读写分离配置的方法
2019/10/13 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
5个javascript的数字格式化函数分享
2011/12/07 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
使用impress.js制作幻灯片
2015/09/09 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
原生js实现移动端瀑布流式代码示例
2015/12/18 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
解决Python传递中文参数的问题
2015/08/04 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
python3将变量写入SQL语句的实现方式
2020/03/02 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
Python 实现RSA加解密文本文件
2020/12/30 Python
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
迟到检讨书800字
2014/01/13 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
二手房购房意向书
2015/05/09 职场文书
工作服管理制度范本
2015/08/06 职场文书
2019年教师节祝福语精选,给老师送上真诚的祝福
2019/09/09 职场文书
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android