-1

假设我有一个标准的 numpy 数组,例如

a = np.arange(6).reshape((2,3))

当我对数组进行子数组时,通过执行以下任务

a[1, :]

我会失去维度,它会变成一维并打印,array([3, 4, 5]) 当然列表是二维的,你本来想保持维度。所以我必须做一个乏味的任务,比如

b=a[1, :]
b.reshape(1, b.size)

为什么子阵列时numpy会降低维度?

保持维度的最佳方法是什么,因为a[1, :].reshape(1, a.size)会破裂?

4

2 回答 2

2

只需使用切片而不是索引,形状就会被保留:

a[1:2]
于 2018-12-16T08:05:34.417 回答
0

尽管我同意 John Zwinck 的回答,但我想提供一个替代方案,以防万一您被迫使用索引(而不是切片)。

OP说“a[1, :].reshape(1, a.size)将打破”:

您可以像这样向 numpy 数组添加维度:

b = a[1]
# array([3, 4, 5]
b = a[1][np.newaxis]
# array([[3, 4, 5]])

(请注意,np.newaxis None,但使用 更具可读性np.newaxis


正如评论中所指出的(@PaulPanzer 和@Divakar),实际上有很多方法可以完成同样的事情(同样,使用索引而不是切片):

这些不复制(每个影响中的数据更改a

a[1, None]
a[1, np.newaxis]
a[1].reshape(1, a.shape[1]) # Use shape, not size

这个确实复制了(数据独立于a

a[[1]]
于 2018-12-16T08:43:31.810 回答