对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 pass 语句使用示例
Mar 11 Python
Python的Flask框架中Flask-Admin库的简单入门指引
Apr 07 Python
python中使用序列的方法
Aug 03 Python
Python读写txt文本文件的操作方法全解析
Jun 26 Python
学生信息管理系统Python面向对象版
Jan 30 Python
python适合人工智能的理由和优势
Jun 28 Python
pandas按行按列遍历Dataframe的几种方式
Oct 23 Python
关于ResNeXt网络的pytorch实现
Jan 14 Python
Python定义一个函数的方法
Jun 15 Python
Python如何读写CSV文件
Aug 13 Python
详解基于Scrapy的IP代理池搭建
Sep 29 Python
Pandas数据类型之category的用法
Jun 28 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
php定时计划任务的实现方法详解
2013/06/06 PHP
PHP中ob_start函数的使用说明
2013/11/11 PHP
PHP中Session和Cookie是如何操作的
2015/10/10 PHP
使用PHP实现微信摇一摇周边红包
2016/01/04 PHP
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
window.open不被拦截的实现代码
2012/08/22 Javascript
JQuery设置和去除disabled属性的5种方法总结
2013/05/16 Javascript
JavaScript内存管理介绍
2015/03/13 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
jQuery实现右键菜单、遮罩等效果代码
2016/09/27 Javascript
深入理解javascript的getTime()方法
2017/02/16 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
bootstrap table实现单击单元格可编辑功能
2017/03/28 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
2019/04/22 Javascript
简单了解小程序+node梳理登陆流程
2019/06/24 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
Python最小二乘法矩阵
2019/01/02 Python
Python 实现数据结构-堆栈和队列的操作方法
2019/07/17 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
python基于opencv实现人脸识别
2021/01/04 Python
Django中的DateTimeField和DateField实现
2021/02/24 Python
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
Myprotein意大利官网:欧洲第一运动营养品牌
2018/11/22 全球购物
香奈儿美国官网:CHANEL美国
2020/05/20 全球购物
感恩节活动方案
2014/01/27 职场文书
预防煤气中毒方案
2014/06/16 职场文书
新员工试用期自我评价
2015/03/10 职场文书
莫言诺贝尔获奖感言(全文)
2015/07/31 职场文书
python字典进行运算原理及实例分享
2021/08/02 Python
使用Django框架创建项目
2022/06/10 Python