NumPy的transpose()方法如何排列数组的轴?

NumPy的transpose()方法如何排列数组的轴?,第1张

NumPy的transpose()方法如何排列数组的轴?

为了转置数组,NumPy只是交换每个轴的形状和步幅信息。这是大步前进:

>>> arr.strides(64, 32, 8)>>> arr.transpose(1, 0, 2).strides(32, 64, 8)

请注意,转置 *** 作将步幅交换为轴0和轴1。这些轴的长度也被交换了(

2
在本示例中,这两个长度都相同)。

无需复制任何数据即可完成此 *** 作;NumPy可以简单地更改其查看基础内存的方式以构造新数组。


可视化步幅

步幅值表示为了到达数组轴的下一个值而必须在内存中传输的字节数。

现在,我们的3D数组

arr
看起来如下(带有标记的轴):

这个数组存储在一个连续的内存块中;
本质上是一维的。要将其解释为3D对象,NumPy必须跳过一定的恒定字节数才能沿三个轴之一移动:

由于每个整数占用8个字节的内存(我们使用的是int64
dtype),因此每个维度的步幅值是需要跳转的值数的8倍。例如,要沿轴1移动,则要跳过四个值(32字节),而要沿轴0移动,则要跳过八个值(64字节)。

在编写时,

arr.transpose(1, 0, 2)
我们将交换轴0和1。转置后的数组如下所示:

NumPy所需要做的就是交换轴0和轴1的步幅信息(轴2不变)。现在,我们必须跳得更远,才能沿着轴1而不是轴0:

这个基本概念适用于数组轴的任何排列。处理转置的实际代码是用C编写的,可以在这里找到。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5668580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存