【问题标题】:Axes Swapping in higher degree numpy arrays轴在更高程度的 numpy 数组中交换
【发布时间】:2017-08-10 00:56:20
【问题描述】:

所以我开始着手弄清楚 numpy swapaxes 函数是如何运作的,并且在交换维度 > 3 的数组中的轴时遇到了某种障碍。 说

import numpy as np
array=np.arange(24).reshape(3,2,2,2)

这将创建一个形状为 (3,2,2,2) 且元素为 0-2 的 numpy 数组。有人可以向我解释一下在这种情况下轴交换究竟是如何工作的,我们无法分别可视化四个轴吗? 假设我想交换轴 0 和轴 2。

array.swapaxes(0,2) 

如果有人能真正描述当有 4 个或更多轴时发生的抽象交换,那就太好了。谢谢!

【问题讨论】:

    标签: arrays numpy swap axes


    【解决方案1】:

    你如何“描述”一个 4d 数组?我们没有直觉可以匹配;我们能做的最好的就是从 2d 经验中进行项目。行、列、平面、??

    这个数组足够小,可以显示实际的打印:

    In [271]: arr = np.arange(24).reshape(3,2,2,2)
    In [272]: arr
    Out[272]: 
    array([[[[ 0,  1],
             [ 2,  3]],
    
            [[ 4,  5],
             [ 6,  7]]],
    
    
           [[[ 8,  9],
             [10, 11]],
    
            [[12, 13],
             [14, 15]]],
    
    
           [[[16, 17],
             [18, 19]],
    
            [[20, 21],
             [22, 23]]]])
    

    打印用额外的 [] 和空白行标记更高的尺寸。

    In [273]: arr.swapaxes(0,2)
    Out[273]: 
    array([[[[ 0,  1],
             [ 8,  9],
             [16, 17]],
    
            [[ 4,  5],
             [12, 13],
             [20, 21]]],
    
    
           [[[ 2,  3],
             [10, 11],
             [18, 19]],
    
            [[ 6,  7],
             [14, 15],
             [22, 23]]]])
    

    要查看实际执行的操作,我们必须查看数组的底层属性

    In [274]: arr.__array_interface__
    Out[274]: 
    {'data': (188452024, False),
     'descr': [('', '<i4')],
     'shape': (3, 2, 2, 2),
     'strides': None,    # arr.strides = (32, 16, 8, 4)
     'typestr': '<i4',
     'version': 3}
    In [275]: arr.swapaxes(0,2).__array_interface__
    Out[275]: 
    {'data': (188452024, False),
     'descr': [('', '<i4')],
     'shape': (2, 2, 3, 2),
     'strides': (8, 16, 32, 4),
     'typestr': '<i4',
     'version': 3}
    

    data 属性是相同的 - 交换是一个视图,与原始共享数据缓冲区。所以没有数字移动。

    形状变化很明显,我们告诉它交换。有时它有助于使所有维度都不同,例如(2,3,4)

    它还交换了 2 个strides 值,尽管这对显示的影响很难解释。我们必须了解形状和步幅如何协同工作以创建多维数组(从平面数据缓冲区)。

    【讨论】:

      猜你喜欢
      • 2014-07-19
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      • 2011-06-18
      • 2012-09-23
      相关资源
      最近更新 更多