-1 在 numpy reshape 中是什么意思?

新手上路,请多包涵

可以使用 .reshape(-1) 将 2D 数组重新整形为 1D 数组。例如:

 >>> a = numpy.array([[1, 2, 3, 4], [5, 6, 7, 8]])
>>> a.reshape(-1)
array([[1, 2, 3, 4, 5, 6, 7, 8]])

通常, array[-1] 表示最后一个元素。但是 -1 在这里意味着什么?

原文由 user2262504 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 700
1 个回答

提供新形状的满足标准是 “新形状应与原始形状兼容”

numpy 允许我们将新形状参数之一指定为 -1(例如:(2,-1) 或 (-1,3) 但不是 (-1, -1))。它只是意味着它是一个未知的维度,我们希望 numpy 能够弄清楚它。 numpy 将通过查看 “数组的长度和剩余维度” 并确保它满足上述标准来计算这一点

现在看例子。

 z = np.array([[1, 2, 3, 4],
         [5, 6, 7, 8],
         [9, 10, 11, 12]])
z.shape
(3, 4)

现在尝试用 (-1) 重塑。结果新形状为 (12,) 并且与原始形状 (3,4) 兼容

z.reshape(-1)
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])

现在尝试用 (-1, 1) 重塑。我们提供的列为 1 但行为 unknown 。所以我们得到结果新形状为 (12, 1)。再次与原始形状 (3,4) 兼容

z.reshape(-1,1)
array([[ 1],
   [ 2],
   [ 3],
   [ 4],
   [ 5],
   [ 6],
   [ 7],
   [ 8],
   [ 9],
   [10],
   [11],
   [12]])

以上与 numpy advice/error message一致,对单个feature使用 reshape(-1,1) ;即单列

如果您的数据只有一个 特征,请使用 array.reshape(-1, 1) 重塑您的数据

新形状为 (-1, 2)。未知行,第 2 列。我们得到结果新形状为 (6, 2)

 z.reshape(-1, 2)
array([[ 1,  2],
   [ 3,  4],
   [ 5,  6],
   [ 7,  8],
   [ 9, 10],
   [11, 12]])

现在试图将列保持为未知。新形状为 (1,-1)。即,行为 1,列未知。我们得到结果新形状为 (1, 12)

 z.reshape(1,-1)
array([[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12]])

以上与 numpy 建议/错误信息一致,对单个样本使用 reshape(1,-1) ;即单排

使用 array.reshape(1, -1) 重塑你的数据—如果它包含一个 样本

新形状 (2, -1)。第 2 行,列未知。我们得到结果新形状为 (2,6)

 z.reshape(2, -1)
array([[ 1,  2,  3,  4,  5,  6],
   [ 7,  8,  9, 10, 11, 12]])

新形状为 (3, -1)。第 3 行,列未知。我们得到结果新形状为 (3,4)

 z.reshape(3, -1)
array([[ 1,  2,  3,  4],
   [ 5,  6,  7,  8],
   [ 9, 10, 11, 12]])

最后,如果我们尝试提供未知的两个维度,即新形状(-1,-1)。它会抛出一个错误

z.reshape(-1, -1)
ValueError: can only specify one unknown dimension

原文由 Julu Ahamed 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题