【问题标题】:Writing and Reading Eigenvalues & Eigenvectors, follow up写和读特征值和特征向量,跟进
【发布时间】:2019-08-03 07:06:44
【问题描述】:

对不起,如果这更好地属于我上一个问题的页面:np.savetxt triggers ValueError. Why? 但我认为此时我不会再收到任何回复。

allow_pickle 建议仍然不起作用,那么我可以尝试什么?

还有,什么是泡菜?我只知道它是一种食物。

谢谢

【问题讨论】:

  • 我怀疑您执行savesavez 的方式有问题。 eig 返回两个数组,一个 1d 和 2d。您必须正确保存它们。 numpy save 和 python pickle 一起工作。
  • 当您询问时,请显示确切的save 命令,以免混淆。
  • 由于某种原因,似乎无法在 cmets 中正确显示多行代码。无论如何,第一行是:eigs=np.linalg.eig(P@K@P)。第二行是:np.savez_compressed('eigs.npz',eigs,allow_pickle=True)。 P 和 K 是之前计算的 10000x10000 矩阵。谢谢
  • 保存*eigs,而不是eigs
  • 好的,试试 np.savez_compressed('eigs.npz',*eigs)

标签: python numpy pickle


【解决方案1】:

Pickle 是一种将 python 对象转换为字节流的序列化技术。 Pickle 最常用于分布式环境中的网络通信。 例如,如果你有一个集群,并且你想将一个特定的 python 对象从一台机器传递到另一台机器,最常见的方法是酸洗对象,通过网络传递它,然后在另一台机器上解开它。 它们还可以用作一种压缩技术,用于在本地 fs 上有效地保存一个巨大的 python 对象。 要使用泡菜,您必须导入库

    import pickle.py

然后允许程序读/写腌制文件

    allow_pickle = true

【讨论】:

  • 尝试导入泡菜。得到 ModuleNotFoundError: No module named 'pickle.py'; 'pickle' 不是一个包
  • 使用import pickle 而不是import pickle.py 可以解决这个问题。不幸的是,当我尝试像这样编写数据时:eigs=np.linalg.eig(P@K@P) np.savez_compressed('eigs.npz',eigs,allow_pickle=True) 我得到:ValueError:无法将输入数组从形状(10000,10000)广播到形状(10000)
  • pickle 格式的 numpy ndarraynp.save 使用的格式相同。相反,当ndarray 包含非数字对象时,它使用它们的pickle 来序列化它们。如果不能互换,这两种方法是相互关联的。
猜你喜欢
  • 2014-05-11
  • 2019-04-16
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 2018-08-04
相关资源
最近更新 更多