[英]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]])
但是如果我知道我将在初始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
首先, 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 中的float
: type(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.