重塑仅具有一维的numpy数组
问题内容:
为了从中获取一个numpy数组,list
我进行了以下操作:
np.array([i for i in range(0, 12)])
得到:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
然后我想从该数组制作一个 (4,3) 矩阵:
np.array([i for i in range(0, 12)]).reshape(4, 3)
我得到以下矩阵:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
但是如果我知道我的初始将有 3 * n个 元素,list
我该如何重塑numpy数组,因为以下代码
np.array([i for i in range(0,12)]).reshape(a.shape[0]/3,3)
导致错误
TypeError: 'float' object cannot be interpreted as an integer
问题答案:
首先,这np.array([i for i in range(0, 12)])
是一种不太优雅的说法np.arange(12)
。
其次,您可以传递-1
到一维整形(函数np.reshape
和方法np.ndarray.reshape
)。就您而言,如果您知道总大小是3的倍数,请执行
np.arange(12).reshape(-1, 3)
得到一个4x3的阵列。从文档:
一个形状尺寸可以为-1。在这种情况下,该值是根据数组的长度和其余维来推断的。
作为一个侧面说明,你得到错误的原因是,普通除法,即使是整数,自动导致float
在Python 3:type(12 / 3)
是float
。您可以通过a.shape[0] // 3
使用整数除法来使原始代码正常工作。话虽这么说,使用-1
起来更加方便。