Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:3D列主张量到行主张量_Python_Numpy_Scipy - Fatal编程技术网

Python:3D列主张量到行主张量

Python:3D列主张量到行主张量,python,numpy,scipy,Python,Numpy,Scipy,我使用scipy.io将Mat文件读入python,加载3D张量。我在网上找到的大多数参考文献只讨论了2个维度,在维度超过2的数据中,我很难将注意力集中在从列专业到行专业 scipy.io是否自动处理从列主目录(order='F')到行主目录(order='C')的转换 如果不是1,那么有没有比结合使用ravel和restrape和order来更改三维张量更好的方法 如果不是2,是否有方法通过编程确定转换张量的形状?在下面的示例中,我使用了“展开”和“重塑”,但很明显,原始形状不合适 示例 在这

我使用
scipy.io
将Mat文件读入python,加载3D张量。我在网上找到的大多数参考文献只讨论了2个维度,在维度超过2的数据中,我很难将注意力集中在从列专业到行专业

  • scipy.io是否自动处理从列主目录(order='F')到行主目录(order='C')的转换
  • 如果不是1,那么有没有比结合使用
    ravel
    restrape
    order
    来更改三维张量更好的方法
  • 如果不是2,是否有方法通过编程确定转换张量的形状?在下面的示例中,我使用了“展开”和“重塑”,但很明显,原始形状不合适 示例

    在这个例子中,假设我有一个(2,4,3)维矩阵,它是在列MARGER中读取的,我想将它反转为行MARGER

    import numpy as np
    
    lst3d = [[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]], [[13, 14, 15], [17, 18, 19], [21, 22, 23], [25, 26, 27]]]
    
    print(lst3d)
    a = np.array(lst3d)
    b = np.array(lst3d)
    
    print(a.shape)
    print('----------')
    print(a.ravel(order='C').reshape(a.shape))
    print('----------')
    print(b.ravel(order='F').reshape(b.shape))
    
    产出:

    [[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]], [[13, 14, 15], [17, 18, 19], [21, 22, 23], [25, 26, 27]]]
    (2, 4, 3)
    ----------
    [[[ 0  1  2]
      [ 3  4  5]
      [ 6  7  8]
      [ 9 10 11]]
    
     [[13 14 15]
      [17 18 19]
      [21 22 23]
      [25 26 27]]]
    ----------
    [[[ 0 13  3]
      [17  6 21]
      [ 9 25  1]
      [14  4 18]]
    
     [[ 7 22 10]
      [26  2 15]
      [ 5 19  8]
      [23 11 27]]]
    
    相关的

    倍频程:

    >> x=0:23;
    >> x=reshape(x,2,4,3);
    >> x
    x =
    ans(:,:,1) =
       0   2   4   6
       1   3   5   7
    ans(:,:,2) =
        8   10   12   14
        9   11   13   15
    ans(:,:,3) =
       16   18   20   22
       17   19   21   23
    >> save -v7 test3d x
    
    在ipython:

    In [192]: data = io.loadmat('test3d')
    In [194]: x=data['x']
    In [195]: x
    Out[195]: 
    array([[[ 0.,  8., 16.],
            [ 2., 10., 18.],
            [ 4., 12., 20.],
            [ 6., 14., 22.]],
    
           [[ 1.,  9., 17.],
            [ 3., 11., 19.],
            [ 5., 13., 21.],
            [ 7., 15., 23.]]])
    In [196]: x.shape
    Out[196]: (2, 4, 3)
    
    显示为八度:

    In [197]: x[:,:,0]
    Out[197]: 
    array([[0., 2., 4., 6.],
           [1., 3., 5., 7.]])
    
    loadmat
    已按
    F
    顺序加载,具有相同的2,4,3形状。右边的
    ravel
    生成原始的0:23数字:

    In [200]: x.ravel(order='F')
    Out[200]: 
    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.])
    
    x
    的转置产生(3,4,2)阶“C”数组:

    In [207]: x.T[0]
    Out[207]: 
    array([[0., 1.],
           [2., 3.],
           [4., 5.],
           [6., 7.]])
    In [208]: y=np.arange(24).reshape(3,4,2)
    In [209]: y[0]
    Out[209]: 
    array([[0, 1],
           [2, 3],
           [4, 5],
           [6, 7]])
    
    我写了一封很长的回信。看看它能解决你的问题。我指出有两个显著的区别:轴顺序和显示样式。