【发布时间】:2016-12-06 00:33:20
【问题描述】:
我有一个涉及 np.reshape 的简单问题。我正在尝试学习如何使用 np.reshape 从一维数组制作一个二维数组。我看过这个教程,但我仍然对教程有一些疑问..
import numpy as np
a = np.arange(8*16)
frame_length = 8
a_framed = np.reshape(a, (-1, frame_length))
print (a_framed)
这是我的问题:
- frame_length 是否决定了新二维数组的列数?如果是这样,为什么不把数字 8 放在“a_framed”中呢?不可以吗?
- “a_framed”中的“-1”是什么?它有什么作用? (教程中省略了解释或对我来说不够)
谢谢! 切切
【问题讨论】:
-
看起来有点矫枉过正...考虑... b = np.arange(8*16).reshape(8,16) ...请注意,如果您使用 n 的产生来生成 arange *m,您可以将 if 重塑为 (m,n) 并将其与 reshape(n,m) 进行比较。 (-1 只是用使其成为 2D 所需的任何数字替换重塑中的第一项
-
嗨!感谢您的回复。您能否详细说明 -1 的作用?谢谢!
-
在您的示例中, np.reshape 需要数组 'a' 和形状。形状为 (-1, frame_length) ... 由于指定了 2 个位置,因此您正在重塑为 2D 数组。现在,您只能对数组进行整形以匹配输入的大小,即 8*16 = 128。在整形中,第二项指定为等于 8 的 frame_length ... -1 本质上意味着“需要什么”保持数组的大小与 2D 形状相同...在这种情况下... (16, 8) size = np.prod(a.shape)。您可以更改 b = np.reshape(a, (2,2,4,8)) 之类的形状以查看相同数据的其他形状
标签: python-3.x numpy multidimensional-array