在python

时间:2018-10-31 09:41:49

标签: python numpy reshape

我试图将尺寸为d1,d2,d3的张量M [a1,a2,a3]整形为尺寸为d2,d1 * d3的矩阵M [a2,a1 * a3]。我尝试过

M.reshape(d2,d1*d3)

,但是结果不是应该的。举一个简单的例子:

    >>> M = np.array([[['a','b'],['c','d']],[['e','f'],['g','h']],[['i','j'],['k','l']]])
    ... array([[['a', 'b'],
     ['c', 'd']],

    [['e', 'f'],
     ['g', 'h']],

    [['i', 'j'],
     ['l', 'k']]], dtype='<U1')

    >>> M.reshape(2,3*2)
    ... array([['a', 'b', 'c', 'd', 'e', 'f'],
                 ['g', 'h', 'i', 'j', 'l', 'k']], dtype='<U1')

有没有办法告诉重塑他应该“相乘”哪些轴? (或者另一个函数),我在矩阵乘积状态的上下文中使用它。

谢谢!

编辑: 收到一些答案后,我可以指定我的问题:

给出维数为d1 x d2 x d3的数组,如何将不相邻的索引与reshape()合并并保持依赖关系。即将3x2x2张量重塑为2x6矩阵,以使行对应于第二(或第三)索引。如示例所示,简单的.reshape(2,6)都不给出。

1 个答案:

答案 0 :(得分:1)

我认为您需要的是先对轴进行重新排序,然后重新塑形:

import numpy as np

M = np.array([[['a','b'],['c','d']],[['e','f'],['g','h']],[['i','j'],['k','l']]])
M = M.transpose((1, 0, 2)).reshape((M.shape[1], -1))
print(M)

输出:

[['a' 'b' 'e' 'f' 'i' 'j']
 ['c' 'd' 'g' 'h' 'k' 'l']]