如何在类numpy.matrix.defmatrix.matrix中获取矩阵的子集

时间:2015-04-10 21:27:20

标签: python numpy matrix

原始矩阵变量是N,形状是(138,210)。 我试图使用N [:] [: - 1]和N [:] [ - 1]来获得该矩阵N的子集。 所以这两个子集的形状将是(138,209)和(138,1)。 但是,此方法不起作用。答复是(137,210)和(1,210)。 我也试过N [: - 1] [:],但这也不起作用。

N的类型是numpy.matrix.defmatrix.matrix

我如何得到正确答案?

2 个答案:

答案 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)形状。