当您要将形状为X
的矩阵(a,b,c,d)
展平为形状为X_flatten
的矩阵(b ∗∗ c ∗∗ d, a)
时的一个技巧是:
X_flatten = X.reshape(X.shape[0], -1).T
我在Coursera DL课程中读了这个技巧,它如何工作? -1
的来源是什么?
答案 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)