原始矩阵变量是N,形状是(138,210)。 我试图使用N [:] [: - 1]和N [:] [ - 1]来获得该矩阵N的子集。 所以这两个子集的形状将是(138,209)和(138,1)。 但是,此方法不起作用。答复是(137,210)和(1,210)。 我也试过N [: - 1] [:],但这也不起作用。
N的类型是numpy.matrix.defmatrix.matrix
我如何得到正确答案?
答案 0 :(得分:1)
选择所有行和所有但最后一列:
N[:, :-1]
从每一行中选择最后一列:
N[:, -1]
N[:, :-1]
的形状为(138, 209)
,N[:, -1]
的形状为(138, 1)
。
This cookbook page解释了多维切片。
为什么N[:][:-1]
会返回少一行的数组:
切片N
默认为沿第一轴切片。所以N[:]
沿着长度为138的切片。如上所示,要沿第二轴切片,您需要提供两个用逗号分隔的切片表达式:例如N[:, :-1]
。第二个切片表达式:-1
应用于第二个轴。
N[:]
返回包含所有行的N
切片(并且由于没有沿第二轴执行切片,因此它也会返回所有列)。它是相同矩阵N
的视图。因此N[:]
具有形状(138, 210)
。 N[:][:-1]
因此选择除N
的最后一行以外的所有行,因此形状为(137, 210)
。
答案 1 :(得分:0)
这对你有用吗?
In [42]: N = np.random.rand(138, 210)
In [43]: N[:, :-1].shape
Out[43]: (138L, 209L)
In [44]: N[:, -1].shape
Out[44]: (138L,)
N[:, :-1]
表示(138, 209)
形状,N[:, -1]
表示(138, 1)
形状。