Python Numpy整形错误

Python Numpy整形错误,python,numpy,reshape,Python,Numpy,Reshape,我在尝试重塑3D numpy阵列时遇到了一个奇怪的错误 数组(x)的形状是(6,10300),我想把它改成(63000) 我正在使用以下代码: reshapedArray = np.reshape(x, (x.shape[0], x.shape[1]*x.shape[2])) 我收到的错误是: TypeError: only integer scalar arrays can be converted to a scalar index 但是,如果我将x转换为一个列表,它会起作用: x =

我在尝试重塑3D numpy阵列时遇到了一个奇怪的错误

数组(x)的形状是(6,10300),我想把它改成(63000)

我正在使用以下代码:

reshapedArray = np.reshape(x, (x.shape[0], x.shape[1]*x.shape[2]))
我收到的错误是:

TypeError: only integer scalar arrays can be converted to a scalar index
但是,如果我将x转换为一个列表,它会起作用:

x = x.tolist()
reshapedArray = np.reshape(x, (len(x), len(x[0])*len(x[0][0])))
你知道为什么会这样吗

提前谢谢

编辑:

这是我正在运行并产生错误的代码

x = np.stack(dataframe.as_matrix(columns=['x']).ravel())

print("OUTPUT:")
print(type(x), x.dtype, x.shape)
print("----------")

x = np.reshape(x, (x.shape[0], x.shape[1]*x[2]))

OUTPUT:
<class 'numpy.ndarray'> float64 (6, 10, 300)
----------

TypeError: only integer scalar arrays can be converted to a scalar index
x=np.stack(dataframe.as_矩阵(columns=['x']).ravel())
打印(“输出:”)
打印(类型(x)、x.D类型、x.shape)
打印(------------)
x=np.重塑(x,(x.shape[0],x.shape[1]*x[2]))
输出:
浮动64(6,10300)
----------
TypeError:只能将整数标量数组转换为标量索引

只有当
重塑
的第二个参数的一个元素不是整数时,才会发生异常,例如:

>>> x = np.ones((6, 10, 300))
>>> np.reshape(x, (np.array(x.shape[0], dtype=float), x.shape[1]*x.shape[2]))
TypeError: only integer scalar arrays can be converted to a scalar index
或者,如果它是一个
数组
(给定编辑历史:您的案例就是这样):

但是,它似乎与解决方法配合使用,这也使得意外键入错误变得更加困难:

>>> np.reshape(x, (x.shape[0], -1))
如果您对
-1
感到疑惑,文档会对此进行解释:

一个形状标注可以是-1。在这种情况下,将根据数组的长度和剩余维度推断该值


请报告:
type(x)
x.dtype
?type=dtype=float64我对上面的代码没有问题。你能发布一个显示错误的帖子吗?整个情况听起来好像在你告诉我们的内容和你实际运行的内容之间存在一些你没有注意到的关键差异。我可以使用一行输入错误来重现错误:
np.reforme(x,(x.shape[0],x.shape[1]*x[2])
非常感谢你的解决方案!即使我输入int(x.shape[1]*x.shape[2]),它也不起作用,并显示了一个新的错误:TypeError:只有length-1数组可以转换为Pythonscalars@SirTobi,我知道你接受了这个答案,但错误的来源仍然很神秘。您是否有可能添加一个独立的、可运行的示例,以便我们这些对问题好奇的人可以尝试复制它?@SirTobi什么。。。这真是太神秘了。
x.shape[1]*x.shape[2]
怎么可能是一个NumPy数组。@WarrenWeckesser是的,所以我从一个pandas数据框中检索数据,我从一个h5文件加载到该数据框中,我尝试创建一个可运行的示例。@SirTobi您说过您有一个数据框,存储为hdf5,然后在执行重塑之前加载。在这种情况下,只需创建一个只包含一个(或
random.random(size)
s)的数据帧,保存它,加载它(像以前一样),然后重新整形。如果错误再次发生,请包括您在问题中所做的一切。
>>> np.reshape(x, (x.shape[0], -1))