重塑仅具有一维的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起来更加方便。