在python中展平矩阵

时间:2018-07-22 04:07:03

标签: python python-3.x

当您要将形状为X的矩阵(a,b,c,d)展平为形状为X_flatten的矩阵(b ∗∗ c ∗∗ d, a)时的一个技巧是:

X_flatten = X.reshape(X.shape[0], -1).T    

我在Coursera DL课程中读了这个技巧,它如何工作? -1的来源是什么?

2 个答案:

答案 0 :(得分:0)

X.shape [0]返回原始数组的第一维:

X = np.random.rand(4, 4, 4, 4)
print(X.shape)

产生

(4, 4, 4, 4)

因此

X.shape[0]

返回

4

使用reshape命令,您可以使用-1作为占位符来省略目标矩阵尺寸之一, 因为其中一个维度可以由numpy推断。

即通过从X.shape [0]提供4,numpy知道数组包含所有值的剩余第一维数。

在示例中

new_X = X.reshape(X.shape[0], -1).T
print(new_X.shape)

(64, 4)

相当于调用

new_X = X.reshape(X.shape[0], 64).T
print(new_X.shape)

.T函数只是转置由reshape命令生成的数组。

答案 1 :(得分:0)

我们可以使用python的基本概念来做同样的事情

nested_list=[10,20,[30,40,[50]],[80,[10,[20]],90],60]
flat_list=[]
def unpack(list1):
    for item in list1:
        try:
            len(item)
            unpack(item)
        except:
            flat_list.append(item)
unpack(nested_list)
print (flat_list)