Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 用拉链将2个numpy尺寸重塑为一个?_Python_Python 3.x_Numpy_Pytorch - Fatal编程技术网

Python 用拉链将2个numpy尺寸重塑为一个?

Python 用拉链将2个numpy尺寸重塑为一个?,python,python-3.x,numpy,pytorch,Python,Python 3.x,Numpy,Pytorch,我试图寻找这个问题,但找不到任何相关的 描述问题的最快方法是使用一个简单的示例: 假设我有一个2D numpy arrayl,如下所示: [[0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23]] [0, 10 ,20 ,1 ,11 ,21 ,2 ,12 ,22 ,3 ,13 ,23 ] 所以它的形状是[3,6] 我想将其重塑为一维阵列,如下所示: [[0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23]]

我试图寻找这个问题,但找不到任何相关的

描述问题的最快方法是使用一个简单的示例: 假设我有一个2D numpy arrayl,如下所示:

[[0, 1, 2, 3],
[10, 11, 12, 13],
[20, 21, 22, 23]]
[0, 10 ,20 ,1 ,11 ,21 ,2 ,12 ,22 ,3 ,13 ,23 ]
所以它的形状是[3,6] 我想将其重塑为一维阵列,如下所示:

[[0, 1, 2, 3],
[10, 11, 12, 13],
[20, 21, 22, 23]]
[0, 10 ,20 ,1 ,11 ,21 ,2 ,12 ,22 ,3 ,13 ,23 ]
与我们通过重塑获得的阵列不同:

[ 0,  1,  2,  3, 10, 11, 12, 13, 20, 21, 22, 23]
现在,对于我的实际问题。。。 我实际上有一个3D数组,我想把它重塑成2D数组,我想用上面描述的方法来实现。 另一个例子是:

import numpy
a = numpy.array([[[0,1,2],[10,11,12],[20,21,22]],
[[100,101,102],[110,111,112],[120,121,122]],
 [[200,201,202],[210,211,212],[220,221,222]]])
a.shape
a.reshape(3,9)
OUTPUT: array([[  0,   1,   2,  10,  11,  12,  20,  21,  22],
       [100, 101, 102, 110, 111, 112, 120, 121, 122],
       [200, 201, 202, 210, 211, 212, 220, 221, 222]])
同样,我希望我的输出看起来像这样:

[[  0,  10,  20,   1,  11,  21,   2,  12,  22],
 [100, 110, 120, 101, 111, ..................],
 [...........................................]]
编辑:为了解决这个问题,我添加了一些搜索词,有些人可能会搜索:

交织维numpy阵列

压缩尺寸numpy数组

Numpy重塑有序尺寸


张量重塑维度时间步

我们需要用np.swapaxes或np.transpose交换最后两个轴,然后重塑

对于2D输入情况,它将是-

a.swapaxes(-2,-1).ravel()
对于三维输入情况,只有重塑零件更改-

a.swapaxes(-2,-1).reshape(a.shape[0],-1)
通用方法:使其通用化,以覆盖所有n-dim阵列情况-

a.swapaxes(-2,-1).reshape(a.shape[:-2] + (-1,)).squeeze()
样本运行

2D案例:

In [186]: a
Out[186]: 
array([[ 0,  1,  2,  3],
       [10, 11, 12, 13],
       [20, 21, 22, 23]])

In [187]: a.swapaxes(-2,-1).reshape(a.shape[:-2] + (-1,)).squeeze()
Out[187]: array([ 0, 10, 20,  1, 11, 21,  2, 12, 22,  3, 13, 23])
3D案例:

In [189]: a
Out[189]: 
array([[[  0,   1,   2],
        [ 10,  11,  12],
        [ 20,  21,  22]],

       [[100, 101, 102],
        [110, 111, 112],
        [120, 121, 122]],

       [[200, 201, 202],
        [210, 211, 212],
        [220, 221, 222]]])

In [190]: a.swapaxes(-2,-1).reshape(a.shape[:-2] + (-1,)).squeeze()
Out[190]: 
array([[  0,  10,  20,   1,  11,  21,   2,  12,  22],
       [100, 110, 120, 101, 111, 121, 102, 112, 122],
       [200, 210, 220, 201, 211, 221, 202, 212, 222]])
运行时测试-

In [14]: a = np.random.rand(3,3,3)

# @mahdi n75's soln
In [15]: %timeit np.reshape(a,(3,9), order='F')
1000000 loops, best of 3: 1.22 µs per loop

In [16]: %timeit a.swapaxes(-2,-1).reshape(a.shape[0],-1)
1000000 loops, best of 3: 1.01 µs per loop

In [20]: a = np.random.rand(30,30,30)

# @mahdi n75's soln
In [21]: %timeit np.reshape(a,(30,900), order='F')
10000 loops, best of 3: 28.4 µs per loop

In [22]: %timeit a.swapaxes(-2,-1).reshape(a.shape[0],-1)
10000 loops, best of 3: 18.9 µs per loop

In [17]: a = np.random.rand(300,300,300)

# @mahdi n75's soln
In [18]: %timeit np.reshape(a,(300,90000), order='F')
1 loop, best of 3: 333 ms per loop

In [19]: %timeit a.swapaxes(-2,-1).reshape(a.shape[0],-1)
10 loops, best of 3: 52.4 ms per loop

我们需要用np.swapaxes或np.transpose交换最后两个轴,然后再重塑

对于2D输入情况,它将是-

a.swapaxes(-2,-1).ravel()
对于三维输入情况,只有重塑零件更改-

a.swapaxes(-2,-1).reshape(a.shape[0],-1)
通用方法:使其通用化,以覆盖所有n-dim阵列情况-

a.swapaxes(-2,-1).reshape(a.shape[:-2] + (-1,)).squeeze()
样本运行

2D案例:

In [186]: a
Out[186]: 
array([[ 0,  1,  2,  3],
       [10, 11, 12, 13],
       [20, 21, 22, 23]])

In [187]: a.swapaxes(-2,-1).reshape(a.shape[:-2] + (-1,)).squeeze()
Out[187]: array([ 0, 10, 20,  1, 11, 21,  2, 12, 22,  3, 13, 23])
3D案例:

In [189]: a
Out[189]: 
array([[[  0,   1,   2],
        [ 10,  11,  12],
        [ 20,  21,  22]],

       [[100, 101, 102],
        [110, 111, 112],
        [120, 121, 122]],

       [[200, 201, 202],
        [210, 211, 212],
        [220, 221, 222]]])

In [190]: a.swapaxes(-2,-1).reshape(a.shape[:-2] + (-1,)).squeeze()
Out[190]: 
array([[  0,  10,  20,   1,  11,  21,   2,  12,  22],
       [100, 110, 120, 101, 111, 121, 102, 112, 122],
       [200, 210, 220, 201, 211, 221, 202, 212, 222]])
运行时测试-

In [14]: a = np.random.rand(3,3,3)

# @mahdi n75's soln
In [15]: %timeit np.reshape(a,(3,9), order='F')
1000000 loops, best of 3: 1.22 µs per loop

In [16]: %timeit a.swapaxes(-2,-1).reshape(a.shape[0],-1)
1000000 loops, best of 3: 1.01 µs per loop

In [20]: a = np.random.rand(30,30,30)

# @mahdi n75's soln
In [21]: %timeit np.reshape(a,(30,900), order='F')
10000 loops, best of 3: 28.4 µs per loop

In [22]: %timeit a.swapaxes(-2,-1).reshape(a.shape[0],-1)
10000 loops, best of 3: 18.9 µs per loop

In [17]: a = np.random.rand(300,300,300)

# @mahdi n75's soln
In [18]: %timeit np.reshape(a,(300,90000), order='F')
1 loop, best of 3: 333 ms per loop

In [19]: %timeit a.swapaxes(-2,-1).reshape(a.shape[0],-1)
10 loops, best of 3: 52.4 ms per loop

关于的文档,这里有一个简单的答案


np.Reformea,3,9,order='F'

关于

np.Reformea,3,9,order='F'

此外,您还可以与order='F'一起使用

请注意,与np.reforme不同,您不必在此处指定任何形状信息。

此外,您还可以与order='F'一起使用


请注意,与np.Reformate不同,您不必在此处指定任何形状信息。

重塑时的标准解决方案不按所需方式排列元素,而是在重塑之前或之后转置或交换。重塑时的标准解决方案不按所需方式排列元素,是在重塑之前或之后转置或交换。原版尽管@Divakar的更为普遍。原创!-虽然@Divakar的更一般。谢谢你的回答,非常详细的例子和解释。我将尝试使用这两个答案,以及另一个答案,看看哪一个会更快。我希望这个帖子能帮助像我这样在搜索这个问题时找不到相关帖子的人。@artembus补充了时间安排。谢谢你的回答,非常详细的例子和解释。我将尝试使用这两个答案,以及另一个答案,看看哪一个会更快。“我希望这个帖子能帮助像我这样在搜索这个问题时找不到相关帖子的人。”artembus补充道。