为了从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
答案 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中的float
:type(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