假设我有一个标准的numpy数组,例如
a = np.arange(6).reshape((2,3))
当我对数组进行子数组处理时,通过执行
a[1, :]
我将失去尺寸,它将变成一维并打印array([3, 4, 5])
当然,列表最初是2D的,因此您要保持尺寸。所以我必须要做一个繁琐的任务,例如
b=a[1, :]
b.reshape(1, b.size)
为什么子数组时numpy会降低维数?
由于a[1, :].reshape(1, a.size)
会中断,保持维数的最佳方法是什么?
答案 0 :(得分:1)
仅使用切片而不是索引,形状将被保留:
a[1:2]
答案 1 :(得分: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]]