【问题标题】:numpy stack rows of ndarrayndarray的numpy堆栈行
【发布时间】:2016-06-10 01:05:18
【问题描述】:

我有一个形状为 (u,v,w) 的 ndarray A,如下所示:

  [[[ 1.,  1.,  0.],
    [ 1.,  3.,  0.]],

   [[ 0.,  0.,  0.],
    [ 0.,  0.,  0.]]]

我需要像这样将行(沿维度 0)堆叠在一起。

[[1.,   1.,   0.,   0.,   0.,   0.],
 [1.,   3.,   0.,   0.,   0.,   0.]]

我该怎么做? 我知道如果只有两行我可以做 np.hstack((a[0], a[1])) 但是有没有办法在不将行转换为元组的情况下做到这一点?我想在 theano 中使用这段代码(因为 numpy 和 theano 的工作方式相似)

【问题讨论】:

    标签: python numpy theano


    【解决方案1】:

    这应该可以正常工作:

    np.hstack(a)
    

    顺便说一句,a[0], a[1], ...a 的行而不是列。

    【讨论】:

    • 你知道我将如何使用 theano 中的 tensor3 变量来做到这一点吗?
    • 查看T.reshapeT.dimshuffle。两者的结合应该可以让你做任何你喜欢的事情。
    • 如果你传入单个张量,T.stack 不会这样做。你必须传入张量列表
    • 我可以使用 dimshuffle 和重复来做到这一点。是 T.dimshuffle(1,0,2).reshape((v,-1))
    【解决方案2】:

    所有concatenate 系列函数都会遍历参数,无论是列表、元组还是数组

    In [318]: x=np.arange(12).reshape(2,2,3)
    
    In [319]: x
    Out[319]: 
    array([[[ 0,  1,  2],
            [ 3,  4,  5]],
    
           [[ 6,  7,  8],
            [ 9, 10, 11]]])
    

    这些都是等价的:

    In [320]: np.hstack([x[0],x[1]])
    Out[320]: 
    array([[ 0,  1,  2,  6,  7,  8],
           [ 3,  4,  5,  9, 10, 11]])
    
    In [321]: np.hstack(x)
    Out[321]: 
    array([[ 0,  1,  2,  6,  7,  8],
           [ 3,  4,  5,  9, 10, 11]])
    
    In [322]: np.concatenate([x1 for x1 in x],axis=1)
    Out[322]: 
    array([[ 0,  1,  2,  6,  7,  8],
           [ 3,  4,  5,  9, 10, 11]])
    
    In [323]: np.concatenate(x,axis=1)
    Out[323]: 
    array([[ 0,  1,  2,  6,  7,  8],
           [ 3,  4,  5,  9, 10, 11]])
    

    Reshape 可以生成正确形状的数组,但顺序错误:

    In [332]: x.reshape(2,6)
    Out[332]: 
    array([[ 0,  1,  2,  3,  4,  5],
           [ 6,  7,  8,  9, 10, 11]])
    

    但是如果我们先交换第一个 2 轴,那么 reshape 就可以了:

    In [333]: x.transpose(1,0,2).reshape(2,6)
    Out[333]: 
    array([[ 0,  1,  2,  6,  7,  8],
           [ 3,  4,  5,  9, 10, 11]])
    

    【讨论】:

    • 我应该接受第一个答案还是更完整的答案?
    • 你知道我将如何使用 theano 中的 tensor3 变量来做到这一点吗?
    • 抱歉,我忽略了 Theano。
    猜你喜欢
    • 2018-07-28
    • 2018-10-10
    • 2021-04-07
    • 2022-01-01
    • 1970-01-01
    • 2018-06-05
    • 2017-12-10
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多