python中的展平矩阵:

python中的展平矩阵:,python,python-3.x,Python,Python 3.x,当您想将形状为(A,b,c,d)的矩阵X展平为形状为(b)的矩阵X\u展平时的技巧∗∗ C∗∗ d、 a)将使用: X_flatten = X.reshape(X.shape[0], -1).T 我在coursera DL课程中读到了这个技巧,它是如何工作的?-1来自何处以及它的含义是什么?X.shape[0]返回原始数组的第一个维度: X = np.random.rand(4, 4, 4, 4) print(X.shape) 导致 (4, 4, 4, 4) 因此 X.shape[

当您想将形状为
(A,b,c,d)
的矩阵
X
展平为形状为
(b)的矩阵
X\u展平时的技巧∗∗ C∗∗ d、 a)
将使用:

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

我在coursera DL课程中读到了这个技巧,它是如何工作的?
-1
来自何处以及它的含义是什么?

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

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

(4, 4, 4, 4)
因此

X.shape[0]
返回

4
使用“重塑”命令,可以通过使用-1作为占位符来忽略一个目标矩阵标注, 因为其中一个维度可以通过numpy推断

也就是说,通过提供X.shape[0]中的4,numpy知道要使数组包含所有值,剩余的第一维度必须是什么

在这个例子中

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

这相当于打电话

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

.T函数只是转换由整形命令生成的数组。

我们可以使用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)

你的矩阵是如何表示的?在努比?谢谢你的解释。
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)