np.newaxis 自己的理解

由于之前学过matlab,目前学习python3,在这里遇到点坑,记录一下。

np.newaxis 在官方介绍下,就是增加一个维度,感觉十分抽象,不知所云,这里我用实验验证下这个函数。

# 先定义一个 一维数组
In [33]: x
Out[33]: array([0, 1, 2, 3, 4])

In [34]: x.shape
Out[34]: (5,)

# 使用np.newaxis 在 列 的方向加一个轴
In [35]: y1 = x[:,np.newaxis]

In [36]: y1.shape
Out[36]: (5, 1)

#
# 使用np.newaxis 在 行 的方向加一个轴
In [37]: y1 = x[np.newaxis,:]

In [38]: y1.shape
Out[38]: (1, 5)

这里,你可能发现了,加一个轴的意思可能是增加一个维度,比如说从一维数组变成二维数组。

 那问题来了,加了以后有什么意义吗?

给你看个例子,你可能会惊讶并且想不通,

In [43]: x
Out[43]: array([0, 1, 2, 3, 4])


In [45]: y1 = x[:,np.newaxis]

In [46]: y2 = x[np.newaxis,:]

In [47]: print(y1,y2)
[[0]
 [1]
 [2]
 [3]
 [4]] [[0 1 2 3 4]]

# 注意看,[1,5],[5,1]的矩阵居然可以相加

In [48]: y1 + y2
Out[48]:
array([[0, 1, 2, 3, 4],
       [1, 2, 3, 4, 5],
       [2, 3, 4, 5, 6],
       [3, 4, 5, 6, 7],
       [4, 5, 6, 7, 8]])

答案是矩阵被重塑了,即在自己维度重塑了,可以通过下面例子理解,如下

In [55]: np.hstack((y1,y1,y1,y1,y1))
Out[55]:
array([[0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2],
       [3, 3, 3, 3, 3],
       [4, 4, 4, 4, 4]])

In [56]: np.vstack((y2,y2,y2,y2,y2))
Out[56]:
array([[0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4]])

 

 

猜你喜欢

转载自blog.csdn.net/qq_39575835/article/details/81942950