python代码,如何理解ndarray类型以及shape维度属性?
发布于 作者:苏南大叔 来源:程序如此灵动~

本文讨论:python
下的list
以及numpy
下的ndarray
的区别。通常意义上,这两个都可以理解为传统意义上的数组。但是,既然有区别,两者又有具体什么样的区别呢?这些数组仅仅是写法上的区别吗?

大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文通过对python
内的list
以及ndarray
的对比,理解两者之间的区别。测试环境:win10
,python@3.6.8
。
list
类型
传统的数组写法[]
,在python
里面不叫array
,而是叫list
,它和set
/tuple
很相似。具体可以参考下面的文章:
这里是list
类型的定义举例:
从上面可以看出:
list
类型,可以表现为多重数组。list
类型,相同层级的数据个数可以不同。list
类型,没有shape
属性。
ndarray
类型
这个类型存在于numpy
中,使用的时候,可能需要import
语句。ndarray
可以从普通数组定义初始化,也可以从list
进行初始化。

认清楚看明白
ndarray
重新定义的时候,必须保证每层元素数量一致。
而且要认清自己传递的是个tuple
,还是个list
。区别就是:最外侧还有个[]
。
下面的是个错误的示例:
可能获得错误提示信息:
可以选择随机初始化
如果是处于测试的目的,可以通过.randint()
函数初始化,具体可以参考:
这个例子就是生成一个2行3列的ndarray
矩阵,元素从[1,3)之间随机变化。另外一个例子就是:
ndarray
类型的shape
属性
苏南大叔个人理解着,ndarray
就是个稍稍高级点的数组,它可以形成矩阵。用于描述ndarray
到底是几维的属性,就是.shape
。这个返回值是个tuple
类型的。
对于一维数组,其返回值是(cnt,)
。也就是说,比日常的理解,多个逗号。这个是元组类型的特殊写法而已。详情请参考:
和传统的多重数组不同的地方,就是同一个维度上的元素个数必须是相同的。如果难以理解的话,可以想象最常见的x,y
矩阵。
当然了,ndarray
的维度也是可以无限扩展的。一维二维还是比较好理解。但是,三维四维五维等,就很难理解了。虽然不常见,但是ndarray
在语法上也是支持的。
测试代码如下:
访问元素
访问数据,都可以使用[][]
来进行数据元素访问。
ndarray可以做加减法
而且这种ndarray
可以做加减法,但是list
是不能做加减法的,会报错。
测试代码:
上面的结果输出是:
相关文章
- https://newsn.net/say/python-tuple.html
- https://newsn.net/say/python-set-vs-list.html
- https://newsn.net/say/python-set-diff.html
综述
在python
中,list
和ndarray
两者都可以是多重数组,都可以使用[]
进行元素访问或者修改。
- 传统的多重数组就是
list
,每层元素数量可以不一致。 - 如果要求数量一致,就是
ndarray
类型。个人理解着,ndarray
就是个带着框架模具萝卜坑的array
。
其中,为了ndarray
数据初始化:
ndarray
可以使用.randomint()
初始化多层shape的数据。ndarray
从具体的数据初始化的话,记得满足同层元素数量相等的原则的前提下,还需要注意函数的唯一参数的最外侧由[]
进行包裹,否则list
类型会被识别成tuple
,进而导致错误失败。
更多python
相关文章,请点击:


