大白包小白
NumPy数组(1、数组初探)更新目前我的工作是将NumPy引入到Pyston中(一款Dropbox实现的Python编译器/解释器)。在工作过程中,我深入接触了NumPy源码,了解其实现并提交了PR修复NumPy的bug。在与NumPy源码以及NumPy开发者打交道的过程中,我发现当今中文NumPy教程大部分都是翻译或参考英文文档,因此导致了许多疏漏。比如NumPy数组中的broadcast功能,几乎所有中文文档都翻译为“广播”。而NumPy的开发者之一,回复到“broadcast is a compound -- native English speakers can see that it's " broad" + "cast" = "cast (scatter, distribute) broadly, I guess "cast (scatter, distribute) broadly" probably is closer to the meaning(NumPy中的含义)"。有鉴于此,我打算启动一个项目,以我对NumPy使用以及源码层面的了解编写一个系列的教程。地址随后会更新。CSDN的排版(列表)怎么显示不正常了。。。NumPy数组NumPy数组是一个多维数组对象,称为ndarray。其由两部分组成:实际的数据描述这些数据的元数据大部分操作仅针对于元数据,而不改变底层实际的数据。关于NumPy数组有几点必需了解的:NumPy数组的下标从0开始。同一个NumPy数组中所有元素的类型必须是相同的。NumPy数组属性在详细介绍NumPy数组之前。先详细介绍下NumPy数组的基本属性。NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是NumPy中的轴(axes),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。NumPy的数组中比较重要ndarray对象属性有:ndarray.ndim:数组的维数(即数组轴的个数),等于秩。最常见的为二维数组(矩阵)。ndarray.shape:数组的维度。为一个表示数组在每个维度上大小的整数元组。例如二维数组中,表示数组的“行数”和“列数”。ndarray.shape返回一个元组,这个元组的长度就是维度的数目,即ndim属性。ndarray.size:数组元素的总个数,等于shape属性中元组元素的乘积。ndarray.dtype:表示数组中元素类型的对象,可使用标准的Python类型创建或指定dtype。另外也可使用前一篇文章中介绍的NumPy提供的数据类型。ndarray.itemsize:数组中每个元素的字节大小。例如,一个元素类型为float64的数组itemsiz属性值为8(float64占用64个bits,每个字节长度为8,所以64/8,占用8个字节),又如,一个元素类型为complex32的数组item属性为4(32/8)。ndarray.data:包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。创建数组先来介绍创建数组。创建数组的方法有很多。如可以使用array函数从常规的Python列表和元组创造数组。所创建的数组类型由原序列中的元素类型推导而来。
fightingBB
数组中的每个元素由一个下标标记的数组叫一维数组,例如array[MaxLen]。数组中的每个元素由两个下标标记的数组叫二维数组,例如array[m][n],直观地看,二维数组表示的是一个M行N列的矩阵。
爱心小猪
就是一个数组中的某个元素,当用数组下标表示的时候,需要用几个数字来表示才能唯一确定这个元素,这个数组就是几维。例如,一个数字确定一个元素:a[7]就是一维的两个数字确定一个元素:b[5][9]是二维三个数字:c[6][8][1]是三维…………n个数字就是n维可以把数组的维看成是“数组套数组的层数”例如,数组{ 1, 5, 9, 0 }是一维数组,要找到数字9只需找第三个数字。{ {1,2}, {5,5}, {2,4}, {9,0} }是二维数组。它套了两层数组。要找到数字9,需要指出9是在外层数组中的哪个元素,还有是内层数组中的哪个元素。所以需要用两个数字标出:数组第4个元素中的第1个元素就是9。