Numpy图解(三)–高维数组

目录

高维数组

创建数组

高维数组运算

连接函数hstack、vstack和dstack

堆叠函数concatenate

求和函数einsum

高维数组

创建数组

通过重排一维向量或转换嵌套的Python列表来创建3D数组时, 索引的含义为(z,y,x)

第一个索引是平面的编号,然后才是在该平面上的移动:

Numpy图解(三)--高维数组

这种索引顺序很方便,例如用于保留一堆灰度图像:这a[i]是引用第i个图像的快捷方式。

但是此索引顺序不是通用的。 处理RGB图像时,通常使用(y,x,z)顺序:前两个是像素坐标,最后一个是颜色坐标(Matplotlib中是RGB ,OpenCV中是BGR )

Numpy图解(三)--高维数组

这样,可以方便地引用特定像素:a[i,j]给出像素的RGB元组(i,j)。

因此,创建特定几何形状的实际命令取决于正在处理的域的约定:

Numpy图解(三)--高维数组

高维数组运算

连接函数hstack、vstack和dstack

显然,NumPy函数像hstack、vstack或dstack不知道这些约定。其中硬编码的索引顺序是(y,x,z),RGB图像顺序是:

Numpy图解(三)--高维数组

RGB图像数组(为简便起见,上图仅2种颜色)

堆叠函数concatenate

如果数据的布局不同,则使用concatenate命令堆叠图像,并在axis参数中提供显式索引数会更方便:

Numpy图解(三)--高维数组

如果不方便使用axis,可以将数组转换硬编码为hstack的形式:

Numpy图解(三)--高维数组

这种转换没有实际的复制发生。它只是混合索引的顺序。

混合索引顺序的另一个操作是数组转置。检查它可能会让我们对三维数组更加熟悉。

根据我们决定的axis顺序,转置数组所有平面的实际命令将有所不同:对于通用数组,它交换索引1和2,对于RGB图像,它交换0和1:

Numpy图解(三)--高维数组

有趣的是,(和唯一的操作模式)默认的axes参数颠倒了索引顺序,这与上述两个索引顺序约定都不相符。

求和函数einsum

最后,还有一个函数,可以在处理多维数组时节省很多Python循环,并使代码更简洁,这就是爱因斯坦求和函数 einsum

Numpy图解(三)--高维数组

它将沿重复索引的数组求和。

Original: https://blog.csdn.net/weixin_43145427/article/details/124317892
Author: hanscal
Title: Numpy图解(三)–高维数组

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/760717/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球