重塑仅具有一个维度的numpy数组

时间:2018-06-07 15:05:22

标签: python numpy reshape

为了从list获得一个numpy数组,我做了以下内容:

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]])

但如果我知道我在初始list中会有 3 * n 元素,我怎样才能重塑我的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

2 个答案:

答案 0 :(得分:4)

首先,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。在这种情况下,该值是从数组长度和剩余维度推断出来的。

作为旁注,你得到错误的原因是,即使是整数,常规除法也会自动导致Python 3中的floattype(12 / 3)float。您可以通过执行a.shape[0] // 3来使原始代码工作,而不是使用整数除法。话虽如此,使用-1会更方便。

答案 1 :(得分:0)

您可以在-1中使用.reshape。如果指定一个维度,Numpy将在可能的情况下自动确定另一个维度[1]。

np.array([i for i in range(0,12)]).reshape(-1, 3)

[1] https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html