python代码,如何理解numpy的ndarray扩维函数expand_dims?
发布于 作者:苏南大叔 来源:程序如此灵动~

对于numpy
中的数组ndarray
类型,有个维度ndim
的概念。其实,维度就是指几重数组。而且ndarray
中的元素,同一维度下,数量必须一致。这就是和传统的数组,所不一样的地方。

大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文记录如何扩展ndarray
的维度,也就是客观的改变.shape
属性。测试环境:win10
,python@3.6.8
。
ndarray
基本概念
本文描述的.expand_dims()
函数,是作用于ndarray
类型上面的。所以,需要定义几个ndarray
变量。具体可以参考:
在本文的代码例子中,使用.shape
形状的概念,来体现.ndim
维度的概念。
.expand_dims()
的axis
参数
.expand_dims()
是个扩维函数,第一个参数就是被扩维的数组,第二个参数axis
就是被扩容的位置。为了更好的理解这个函数,最好先观察它的维度信息。

一个数组的.shape
信息,是个元组,也可以理解为不可变数组。它的第一个值就是axis=0
的位置,第二个值就是axis=1
的位置。被扩容后,对应的轴索引为[0]
,其它轴后移。
axis
取负数的时候,就是从最后的位置添加的。-1
就是添加在最后,-2
就是添加在倒数第二位,后面的向右移动。
下面做个图表,对于最初始的一维数组[1,2]中的2
,axis
是顺序叠加的。做个总结:
维度 | 初始shape | 访问到2的脚本索引 | 访问到2的脚本索引表示2 | 叠加axis进入下一行 |
---|---|---|---|---|
1 | (2,) | [1] | [1] | 0 |
2 | (1,2) | 【0】[1] | [0,1] | 1 |
3 | (1,1,2) | [0]【0】[1] | [0,0,1] | -1 |
4 | (1,1,2,1) | [0][0][1]【0】 | [0,0,1,0] | -2 |
5 | (1,1,2,1,1) | [0][0][1]【0】[0] | [0,0,1,0,0] | 前四状态,第五动作,这里没动作 |
其实,变化最大的还是变量本身,随着维度的增加,数据也变得越来越复杂和难以理解。不过,大多数时候,大家用到的也就是2维数组。所以,也不用多耗费脑细胞,去想象3维4维甚至5维数组到底是什么样子的。
如果不顺序叠加的话,就是说axis
不按套路出牌的话,报错类似如下:
.expand_dims()
扩维前后
扩维前后的变量存在引用关系!!!扩维前的变量变的话,后面的变量也发生变化!请看下面的代码:
上面的例子中,b1
扩容后形成b2
,然后修改b1
,然而b2
显示也被修改了。不是说两个变量是引用关系,而是说后者变量的一部分是引用到了原变量。
相关链接
- https://newsn.net/say/python-ndarray.html
- 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
相关文章,请点击:


