ndarray:n-dimensional array object,即多维数组对象,是python自带的array对象的扩展,array对象和list对象的区别是array对象的每一个元素都是数值,而list保存的是每个元素对象的指针,而作为array对象的扩展,ndarray在科学计算中就非常适合并且功能强大。

创建ndarray

1. 使用列表对象创建ndarray

import bumpy as np

a = np.array([1,2,3,4])

以上为一种创建ndarray的方式,即用一个列表对象来创建,注意,ndarray中的所有元素类型都必须一致(atomic vector),上例中,如果其中一个元素为字符类型,则所有的元素都会自动转换为字符类型,通过dtype属性来获取ndarray中每个元素的类型,同时numpy中还提供了numpy.typeDict来存放各种类型的简称-类型字典;

由于ndarray是多维数组对象,可以通过shape属性来获取数组的各维情况,并且可以通过reshape方法改变当前的形状;

2. 使用numpy中特有函数创建ndarray

除了使用python中的列表对象来创建ndarray之外,numpy中还提供了一系列特定的函数用来创建ndarray

numpy.arange(0,1,0.1):arange和range类似,通过指定起始值、终止值、步长来创建数组,是一个前闭后开的区间,如该例创建的数组为:array([0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]);

numpy.linspace(0,1,10):linspace是通过指定起始值、终止值、元素个数来创建一个等差数组,默认为前闭后闭,通过设置endpoint=False可以对终止值设置是否包含;

numpy.logspace(0,1,12,base=2,endpoint=False):logspace是和linspace的区别是创建的是等比数组,默认以10为底,通过设置base改变底值;

numpy.zeros()、numpy.ones()、numpy.empty()等函数创建特定形状的数组,和matlab中类似;

numpy.fromstring():通过字符串来创建数组,字符串的每一个字符占用一个字节的空间,也就是8个字节,通过指定dtype,创建不同的数组;当dtype=int8时,每个字符对应一个元素,当dtype=16时,两个字符对应一个元素,并且以16进制保存(高位的字符需要乘以16);

numpy.fromfunction(func, (10,)):该函数通过指定一个创建函数和一个shape来创建数组,当shape只有一个元素(一维数组)时,func函数应该也只有一个参数,并且该参数自动从0开始递增带入得到一系列返回值,从而创建ndarray;

存取ndarray

1. 存取一维ndarray

ndarray的元素访问支持python中的列表的访问方式(下标以及切片)访问ndarray元素,通过下标和切片访问得到的新数组是原始数组的一个视图(view),和原始数组共享存储;

除了列表的访问方式,ndarray还支持整数列表、整数数组、布尔数组等访问方式,通过这些访问方式得到的新数组是原始数组的拷贝,并不共享存储;

整数列表的访问会按照给定列表的元素作为下标依次访问原始数组中的每个元素:

a = np.arange(10)

b = a[[3,3,-3,8]]

整数数组的访问在列表的基础上,访问得到的新数组会保留数组的形状;

布尔数组的访问,指使用一个布尔数组,只访问到布尔数组中True对应下标的元素;注意,只对布尔数组有效,如果是列表,则会讲True和False当做1和0作为下标处理;

布尔数组的访问通常由ufunc产生;

2. 存取多维数组

访问多维数组需要指定多维的下标,在python中实现多维下标的方式是通过元组(tuple),由于 1,2 和 (1,2)表示的语义相同,所以用元组表示下标时,也变得非常自然;ndarray的多维数组中,可以通过元组中分别指定切片来访问多维数组(得到的仍然是视图);同时也可以通过数组和切片的组合、数组和数组的组合来访问多维数组,记住将元组作为下标,元组中的每个元素分别对应某一维上的下标,则一切迎刃而解;

需要注意的是,使用切片是指定某一行或者某一列等(保留形状),但是用整数数组访问时,访问的是某一个下标(不会保留形状,只是简单地将值取出);

如果一个多维数组访问时,指定的下标小于维数,则剩余的维数下标默认全部访问(相当于切片 : 代替);

如果用数组和数组的结合来访问多维数组,则只有当两个数组的形状相同时,得到的数组和下标数组的形状相同;

numpy中可以使用一个列数组和一个行数组相加得到一个二维数组;

结构数组

通过使用结构数组,可以实现类似C语言中struct的功能;结构数组使用numpy.dtype()实例,实例化时,使用一个字典指定结构的名称和对应的类型(类型可以使用numpy.typeDict中的简称,字符串通过S32等来表示,32指定保存时的字符串长度,用以内存对齐);

结构数组除了数组用下标的访问方式之外,还可以通过字段访问;

通过numpy定义的结构数组可以通过tofile方法直接保存到文件中,并且该文件可以被c语言获取结构;

a.tofile(’test.bin')

通过c语言读取:

#include

struct person

{

char name[32];

int age;

float weight;

}

struct person p[3];

void main(){

FILE *fp;

int i;

fp = fopen("test.bin","rb");

fread(p, sizeof(struct person), 2, fp);

fclose(fp);

for(i=0; i<2; i++){

printf("%s %d %f\n",p[i].name, p[i].age, p[i].weight);

}

}

内存结构

adarray的信息使用一个数组来描述,该数组引用两个对象:dtype和data,其中data表示一个连续的数据存储区域,并保存数组的形状以及间隔,从而访问连续存储区域中的指定位置存放的数据,实现对数组的访问;

如上图,dtype指向元素类型的对象;

dim count表示维数,dimensions是一个长度为dim count的数组,指定数组每一维的长度;

strides是一个长度为dim count的数组,每个元素是一个整数值,用来指定各维元素的间隔,如上图中表示第一维元素每增加1,则地址增加12,第二维元素每增加1,则地址增加4;

numpy中默认的数据存储排序方式是c语言中的排序方式,即第一维是最上位的,第一维的值增加1时,地址增加的范围最大,而在fortran语言中,第一维是最下位的,第一维增加1时,只增加一个元素的字节长度,如上例中,strides如果按照fortran语言中的排序方式,则应该为:(4,12),通过在定义数组时,指定order=“F”,来使用fortran语言的排序方式;

了解内存结构可以解释以下问题:为什么切片访问数组时,得到的数组是视图,而通过数组访问数组时,得到的数组是一份拷贝?

由于切片访问数组时,只需要改变strides的值,就可以对数组进行另外一种方式的访问,如如果存在数组a按照上图的方式保存,则b = [::2,::2]得到一个新的数组时,只需要将strides改为(24,8)就可以,而data则可以引用相同的存储区域;而当使用数组进行访问时,由于并不能保证是等间隔分布的,无法通过改变其他属性的方式保持数据不变,所以只能新建一份数据的拷贝来实现;

通过数组的flags属性可以查看数据存储区域的属性;

python中ndarray除_python科学计算_numpy_ndarray相关推荐

  1. python np dot函数_python科学计算之Numpy

    Numpy的组成与功能 Numpy(Numeric Python)可以被理解为一个用python实现的科学计算包,包括: 1.强大的N维数组对象Array: 2.成熟的函数库: 3.实用的线性代数.傅 ...

  2. python矩阵sin计算器_Python科学计算工具

    Python科学计算工具-Numpy入门 2017.07.02 20:29:14字数 1,404阅读 2,509 一:前言 学了中国大学mooc的Python数据分析与展示课程感觉挺不错的,记录下来以 ...

  3. python数组去重函数_Python科学计算库Numpy之 数组操作

    操作ndarray 的方法 numpy.reshape:这个函数在不改变数据的条件下修改形状 numpy.ndarray.flat:该函数返回数组上的一维迭代器,行为类似 Python 内建的迭代器 ...

  4. python下表运算_python科学计算_numpy_广播与下标

    多维数组下标 多维数组的下标是用元组来实现每一个维度的,如果元组的长度比维度大则会出错,如果小,则默认元组后面补 : 表示全部访问: 如果一个下标不是元组,则先转换为元组,在转换过程中,列表和数组的转 ...

  5. python 科学计算设计_Python科学计算——Data Structures

    为什么选择Python作为科学计算语言? 有关于Matlab和Python哪个更适合作为科学计算语言的争论已久,之所以选择Python作为首选的科学计算语言,不仅仅是因为它免费,开源,有很多优秀的库和 ...

  6. 基于python的风险管理方式属于_张家港高校邦_Python科学计算_网课答案

    张家港高校邦_Python科学计算_网课答案3rh4 张家港高校邦_Python科学计算_网课答案 关注公众号{帅搜}即可查询答案 支持:大学网课,智慧树,知到,超星,尔雅,学习通,选修课,公务员,外 ...

  7. Python 网页爬虫 文本处理 科学计算 机器学习 数据挖掘兵器谱

    Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱 2015-04-27 程序猿 程序猿 来自:我爱自然语言处理,www.52nlp. ...

  8. python中符号计算输出数学_Python科学计算与数据处理—符号运算库.doc

    Python 科学计算与数据处理 - 符号运算库 符号运算库目录从示例开始欧拉恒等式球体体积数学表达 式符号数值运算符和函数符号运算表达式转换和简化方程目录微分 方程积分其他函数符号运算库. 它的目标 ...

  9. python中ndarray对象实例化_Python数据分析之Numpy学习 2——NumPy 基础 ndarray对象

    Python数据分析之Numpy学习 2 -- NumPy 基础学习 NumPy(Numerical Python)是高性能科学计算和数据分析的基础包.NumPy的主要对象是同构数据多维容器(homo ...

最新文章

  1. VTK:可视化算法之HeadSlice
  2. iOS Hacker Keychain相关The executable was signed with invalid entitlements
  3. Spring注解 @Qualifier 说明、用法
  4. C++四种强制类型转换解析
  5. HDLM命令dlnkmgr详解之二__help/clear
  6. rel=nofollow属性--seo
  7. 计算机应用的三级学科名称及代码,学科分类与代码版.doc
  8. PHP: ThinkPHP获取客户端IP地址
  9. 【笔记】WGS84转GCj02
  10. Moonstarter IDO 一步一步的操作
  11. 深入浅出java并发编程(线程池)
  12. burpsuit无法成功代理之导入证书
  13. matlab 子函数怎么写,matlab中怎么写函数
  14. 英语中的逻辑思维真奇妙
  15. 网线每根的含义以及类别和距离传输问题
  16. 微信小程序之蓝牙通信模块
  17. 辰视将携3D视觉新技术新产品参加2021广东工博会暨广东自动化展
  18. 中国32个地区的股权投资税收优惠政策一览
  19. 全国计算机有一级学科博士点的学校,拥有一级学科博士点能否说明一个学校的这个专业较强?...
  20. xpath取最后一个元素

热门文章

  1. 认证(Authentication)和授权(Authorization)
  2. lua_code_cache off/on
  3. 【短视频运营】账号主页搭建 ① ( 昵称 | 昵称原则 | 昵称公式 | 昵称禁忌 | 个人简介 | 个人简介公式 )
  4. [成就系统][钓鱼成就]没跑掉的鱼(各种鱼类出处)
  5. 2021年全球与中国医院担架行业市场规模及发展前景分析
  6. Linux安装JDK和Tomcat
  7. 小学一年级语文考试试题【19】
  8. 合并类游戏模板Demo
  9. 智能会议-离线语音识别系统
  10. QQ炫舞手游显示进入服务器失败6,QQ炫舞手游进不去怎么办