我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

说了ndarray的降维方法,本文反其道而行,说说ndarray的增加维度的方法。在以前的文章中,是使用np.expand_dims()来增加维度的。本文使用另外一个方法,叫做np.newaxis。它不是一个函数,只是一个特殊的常量。

苏南大叔:基于python,利用np.newaxis扩展维度信息,等效的三种写法 - np
基于python,利用np.newaxis扩展维度信息,等效的三种写法(图1-1)

苏南大叔的“程序如此灵动”技术博客,记录苏南大叔的代码经验总结。本文测试环境:win10python@3.11.0numpy@1.24.2

np.newaxis 代表 None

既然是个常量,那么必然代表着某个数值。打印一下看看效果。

import numpy as np
print(np.newaxis)  # None

居然输出None

np.newaxis 同效不同写法

新的测试代码对比:

import numpy as np

x = np.array([1, 2, 3])
print(x.shape)  # (3,)

x0 = x[:, np.newaxis]
print(x0,x0.shape)  # [[1] [2] [3]] (3, 1)

x1 = x[:, None]
print(x1,x1.shape)  # [[1] [2] [3]] (3, 1)

print(np.array_equal(x0, x1))  # True

x2 = np.expand_dims(x, axis=1)
print(x2,x2.shape)  # [[1] [2] [3]] (3, 1)

print(np.array_equal(x0, x2))  # True

结论是:

  • 使用np.newaxisNone效果一样。
  • 使用np.newaxisnp.expand_dims()的效果也是一样的。

轴向 axis 设置

import numpy as np

x = np.array([1, 2, 3])
print(x.shape)  # (3,)

x3 = x[np.newaxis, :]
print(x3.shape)  # (1, 3)
print(x3)  # [[1 2 3]]

x4 = np.expand_dims(x, axis=0)
print(x4.shape)  # (1, 3)
print(x4)  # [[1 2 3]]

可见:np.newaxis的代码位置,代表了axis轴向。

维度要一层一层扩展

理论上可以拓展无线多层,只要按顺序不断执行即可。

# 基于上面的x3,x4
x5 = x3[np.newaxis, :]
print(x5.shape)  # (1, 1, 3)
print(x5)  # [[[1 2 3]]]

x6 = np.expand_dims(x4, axis=0)
print(x6.shape)  # (1, 1, 3)
print(x6)  # [[[1 2 3]]]

一键降维

本文的这些变量,都是np.squeeze()函数的好的实验对象。

import numpy as np

x = np.array([1, 2, 3])  # (3,)
x0 = x[:, np.newaxis]  # [[1] [2] [3]] (3, 1)
x1 = x[:, None]  # [[1] [2] [3]] (3, 1)
x2 = np.expand_dims(x, axis=1)  # [[1] [2] [3]] (3, 1)
x3 = x[np.newaxis, :]  # [[1 2 3]]  (1, 3)
x4 = np.expand_dims(x, axis=0)  #  [[1 2 3]]  (1, 3)
x5 = x3[np.newaxis, :]  # [[[1 2 3]]] (1, 1, 3)
x6 = np.expand_dims(x4, axis=0)  # [[[1 2 3]]] (1, 1, 3)

print(np.squeeze(x))    # [1 2 3]
print(np.squeeze(x0))   # [1 2 3]
print(np.squeeze(x1))   # [1 2 3]
print(np.squeeze(x2))   # [1 2 3]
print(np.squeeze(x3))   # [1 2 3]
print(np.squeeze(x4))   # [1 2 3]
print(np.squeeze(x5))   # [1 2 3]
print(np.squeeze(x6))   # [1 2 3]

结语

这些就是维度的游戏... 更多python的经验技巧文章,请参考:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python