shape[0]就是第一个列的行数
例子1:假设x的shape是(209, 64, 64, 3)的
>>> X.shape
(209, 64, 64, 3)
>>> X.shape[0]
209
通过reshape重新建立维度,第一个维度就是X.shape[0],这就是正常的reshape操作;第二个维度是-1,我们知道X的shape属性是多少,是(209, 64, 64, 3),但是想让X变成209行,列数不知道是多少,所以也就是209 * 64 * 64 * 3 / 209,也就是64 * 64 * 3。
>>> X.reshape(X.shape[0], -1)
(209, 64*64*3)
X.reshape(X.shape[0], -1).T可以将一个维度为(a,b,c,d)的矩阵转换为一个维度为(b∗c∗d, a)的矩阵。
>>> X.reshape(X.shape[0], -1).T
(64*64*3, 209)
reshape(1,-1)转化成1行:
reshape(2,-1)转换成两行:
reshape(-1,1)转换成1列:
reshape(-1,2)转化成两列
reshape(2,8)转化成两行八列
test = [[1,2,3],[2,3,4]]
test_x = np.reshape(test_x, (2, 1, 3)) # 转二维为三维
总结:
参数-1就是不知道行数或者列数多少的情况下使用的参数,所以先确定除了参数-1之外的其他参数,然后通过(总参数的计算) / (确定除了参数-1之外的其他参数) = 该位置应该是多少的参数。
例:假设我们不知道z的shape属性是多少,但是想让z变成只有一列,行数不知道多少,通过z.reshape(-1,1),Numpy自动计算出有8行。
import numpy as np
z = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]])
c = z.reshape(-1, 1)
print("c:",c)
> c: [[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]]
想让z变成2列,但是不知道多少行,Numpy自动计算出有4行,数组shape属性为(2, 4)与原来的(1, 8)配套。
import numpy as np
z = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]])
d = z.reshape(-1, 2)
print("d:",d)
> d: [[1 2]
[3 4]
[5 6]
[7 8]]
文章出处登录后可见!