将 3D numpy 数组保存到 .txt 文件

Luc*_*ota 7 python numpy save

我只是问这个问题,因为它两天前在我的台式机上工作,但是当我试图在我的笔记本电脑上运行它时,它不起作用。

array = numpy.zeros((3,3,1))
numpy.savetxt("nxx", array, fmt='%s')
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误:

“应为 1D 或 2D 数组,改为 %dD 数组”% X.ndim) ValueError:应为 1D 或 2D 数组,改为 3D 数组

aba*_*ert 8

正如文档所解释的,savetxt只能保存一维和二维数组。

\n\n

您希望如何保存它?savetxt保存到 CSV 文件中:列由空格分隔,行由换行符分隔,这在文本编辑器中看起来很漂亮并且是二维的。你会如何将其扩展到 3D?

\n\n

如果您想要使用某种特定的格式,可能会有一个格式化程序(或者可能只是将reshape数组转换为 2D 的问题?),但您必须解释一下你想要什么。

\n\n

如果您不关心在文本编辑器中编辑输出,为什么不将其保存为二进制格式,例如numpy.save("nxx.npy", array)?它可以很好地处理任何形状。

\n\n
\n\n

IIRC,旧版本的 NumPy 通过将除一个维度之外的所有维度扁平化为单个维度来处理此问题。因此,要使用您的数据,您必须加载它,然后重塑它\xe2\x80\x94,只有当您从其他地方知道原始尺寸是什么时,您才能做到这一点。您甚至不会意识到这个问题,直到您花了整整一周生成了几 TB 的文件,而您现在却不知道如何使用这些文件。(我猜这就是为什么他们改变了行为\xe2\x80\x94它是偶然使用的,而不是故意使用的,并且带来了恼人的后果。)

\n\n

不管怎样,如果你想要这种行为,你自己将数组重新整形为二维然后保存当然是微不足道的:

\n\n
np.savetxt("nxx", array.reshape((3,-1)), fmt="%s")\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者,甚至更好:

\n\n
np.savetxt("nxx", array.reshape((3,-1)), fmt="%s", header=str(array.shape))\n
Run Code Online (Sandbox Code Playgroud)\n