繁体   English   中英

重塑只有一维的 numpy 数组

[英]Reshape numpy array having only one dimension

为了从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]])

但是如果我知道我将在初始list3 * 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

首先, np.array([i for i in range(0, 12)])是一种不太优雅的表达方式np.arange(12)

其次,您可以将-1传递给 reshape 的一维(函数np.reshape和方法np.ndarray.reshape )。 在您的情况下,如果您知道总大小是 3 的倍数,请执行

np.arange(12).reshape(-1, 3)

得到一个 4x3 数组。 从文档:

一个形状维度可以是 -1。 在这种情况下,该值是从数组的长度和剩余维度推断出来的。

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

您可以在.reshape使用-1 如果您指定一个维度,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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM