【问题标题】:Using dat file in Python在 Python 中使用 dat 文件
【发布时间】:2021-12-09 14:26:39
【问题描述】:

我正在尝试对 python 中的 dat 文件执行乘法运算。文件在这里:

我的代码如下:

 P = np.loadtxt('ref-099_matterpower.dat', unpack = True)                                                                                 
deltaFourierSpace = math.sqrt(P*L) * np.exp(zeta*1j)

一切都已正确定义,所以不要太担心。 'L' 和 'zeta' 是常数,所以基本上我试图将每个 k/h 值的 P 值乘以 L 并平方根表达式。无论如何,问题是当我尝试运行代码时如下:

TypeError: only size-1 arrays can be converted to Python scalars.

这个问题变得有点烦人,在使用 vectorize 函数时:

deltaFourierSpace = math.sqrt(np.vectorize(P)*L)*np.exp(zeta*1j)

我收到了这条消息:

TypeError: unsupported operand type(s) for 'vectorize' and 'int'

如果有人能提供帮助,我将不胜感激。谢谢!

【问题讨论】:

  • 您不能只“正确定义”了所有代码。我们需要看到一些东西。见minimal, reproducible example
  • math 函数仅适用于标量值。您不能将它们与数组一起使用!请花时间阅读函数文档。我不知道你想用np.vectorize 做什么,我怀疑你也不知道。
  • 令人费解的是,您在一处使用np.exp,而在另一处使用math.sqrt。这种选择背后的逻辑是什么?
  • 另外,你真的检查过loadtxt产生的P吗?它的形状是什么?类型?试试P*L?

标签: python arrays numpy matplotlib


【解决方案1】:

看看你对np.vectorize的使用:

In [80]: np.vectorize(np.arange(3))
Out[80]: <numpy.vectorize at 0x7fe8e0bafee0>
In [81]: np.vectorize(np.arange(3))*34
Traceback (most recent call last):
  File "<ipython-input-81-f3abb809a8ee>", line 1, in <module>
    np.vectorize(np.arange(3))*34
TypeError: unsupported operand type(s) for *: 'vectorize' and 'int'

Out[80] 是一个“矢量化”对象;如果您阅读 np.vectorize 文档,您会发现它是一个类似对象的函数,旨在通过参数“调用”。与它相乘没有任何使用意义。

我感觉你只是在随意尝试,没有花时间阅读文档,甚至没有阅读 numpy 基础知识。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 2018-08-26
    • 2021-06-10
    相关资源
    最近更新 更多