对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判断端口是否打开的实现代码
Feb 10 Python
python制作websocket服务器实例分享
Nov 20 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
Python中创建二维数组
Oct 17 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
Jan 08 Python
解决nohup执行python程序log文件写入不及时的问题
Jan 14 Python
Django文件存储 自己定制存储系统解析
Aug 02 Python
Scrapy框架基本命令与settings.py设置
Feb 06 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
django models里数据表插入数据id自增操作
Jul 15 Python
Python配置pip国内镜像源的实现
Aug 20 Python
利用Python实现模拟登录知乎
May 25 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
Zend的MVC机制使用分析(一)
2013/05/02 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
PHP反射学习入门示例
2019/06/14 PHP
arguments对象
2006/11/20 Javascript
页面使用密码保护代码
2013/04/10 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
Javascript数组中push方法用法分析
2016/10/31 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
vue组件详解之使用slot分发内容
2018/04/09 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
2020/05/06 Javascript
python网络编程学习笔记(一)
2014/06/09 Python
Python实现的网页截图功能【PyQt4与selenium组件】
2018/07/12 Python
基于keras中的回调函数用法说明
2020/06/17 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
乌克兰鞋类购物网站:Eobuv.com.ua
2020/11/28 全球购物
介绍一下HDLC(High-Level Data Link Control)高层数据链路协议
2012/01/21 面试题
解释下面关于J2EE的名词
2013/11/15 面试题
中学生打架检讨书
2014/02/10 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
优秀员工推荐信
2014/05/10 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
广告文案的撰写技巧(实用干货)
2019/08/23 职场文书
Django migrate报错的解决方案
2021/05/20 Python
css height属性中的calc方法详解
2021/06/03 HTML / CSS
理解python中装饰器的作用
2021/07/21 Python
Java 多态分析
2022/04/26 Java/Android
vscode内网访问服务器的方法
2022/06/28 Servers