收到错误:无法将表达式转换为浮点数

如何解决收到错误:无法将表达式转换为浮点数

我是python的新手,我试图在表面上找到Christoffel symbols的黎曼度量标准,但出现了以下错误 TypeError:无法将表达式转换为浮点型。为简单起见,我编写了另一个错误完全相同的代码我的基本代码很长且不可读,因此我尝试使用此示例代码来了解我的错误)。这是我的示例代码

from sympy import *
import numpy as np

coor = symbols('x y')

x = [coor[0] ** 2,coor[1]]


christoffels = np.zeros((2,2))

for i in range(2):
    for j in range(2):
        christoffels[i][j] = x[i] * x[j]


print(christoffels)

您能告诉我出什么事了吗?

解决方法

作业存在多个问题:

christoffels[i][j] = x[i] * x[j]

在右侧,我们有symbols,在左侧,我们有NumPy floats数组单元格。

因此,Python很难将symbols转换为浮点数。

TypeError: can't convert expression to float

让我们通过将矩阵定义为sympy matrix来解决此问题:

from sympy import *
import numpy as np

coor = symbols('x y')

x = [coor[0] ** 2,coor[1]]


# Create sympy array
christoffels = zeros(2,2)

for i in range(2):
    for j in range(2):
        # Now assignment works
        # NOTE: In sympy location denoted as [i,j] and not [i][j]
        christoffels[i,j] = x[i] * x[j]

# Matrix([[x**4,x**2*y],[x**2*y,y**2]])
print(christoffels)
,

select p.*,coalesce( exp( sum(ln(s.adjustment)) over (partition by p.ticker order by p.ddate desc rows between unbounded preceding and 1 preceding) ),1 ) * p.unadj as adjusted from prices p left join splits s on s.ticker = p.ticker and s.split_date = p.ddate; ticker | ddate | unadj | adjusted --------+------------+--------+------------------------ AAPL | 2020-09-01 | 134.18 | 134.18 AAPL | 2020-08-31 | 129.04 | 129.04 AAPL | 2020-08-28 | 499.23 | 124.807500000000000000 AAPL | 2020-08-27 | 500.04 | 125.010000000000000000 AAPL | 2020-08-26 | 506.09 | 126.522500000000000000 (5 rows) 会话中(已经定义了isympyx

y

In [1]: coor = symbols('x y') In [2]: coor Out[2]: (x,y) 是一个元组

coor

In [3]: xx = [coor[0]**2,coor[1]] In [4]: xx Out[4]: ⎡ 2 ⎤ ⎣x,y⎦ 是一个包含2个sympy对象的列表。

如果我们创建对象dtype数组,则可以分配sympy元素:

xx

或者创建列表的理解方式

In [5]: xy = np.empty((2,2),object)

In [6]: for i in range(2):
   ...:     for j in range(2):
   ...:         xy[i,j] = xx[i]*xx[j]
   ...: 

In [7]: xy
Out[7]: 
array([[x**4,y**2]],dtype=object)

作为嵌套列表,然后像以前一样排列:

In [8]: [[i*j for j in xx] for i in xx]
Out[8]: 
⎡⎡ 4   2  ⎤  ⎡ 2     2⎤⎤
⎣⎣x,x ⋅y⎦,⎣x ⋅y,y ⎦⎦

对象dtype数组经常出现在SO问题上,但通常是在创建“参差不齐”的数组时出现。它们没有数字dtype数组的速度或计算能力。

只要元素本身实现正确的方法(例如加法),某些基本数学就可以使用对象dtype数组

In [9]: np.array(_)
Out[9]: 
array([[x**4,dtype=object)

(没有人实现In [10]: xy.sum(axis=1) Out[10]: array([x**4 + x**2*y,x**2*y + y**2],dtype=object) In [11]: np.exp(xy) ... TypeError: loop of ufunc does not support argument 0 of type Pow which has no callable exp method 方法。)

expsympy中运行,因此基本的python结构(如元组和列表)是很自然的。与python的交互是命中注定的,从来没有像纯数字数组那样快。 numpy自己的矩阵/数组导入通常会为您提供更多功能,但需要更多研究。

另一个答案中给出的sympy's对象:

sympy.Matrix

也可以从嵌套列表中构造:

In [20]: zz = zeros(2,2)

In [21]: for i in range(2):
    ...:     for j in range(2):
    ...:         zz[i,j] = xx[i]*xx[j]
    ...: 

In [22]: zz
Out[22]: 
⎡  4    2  ⎤
⎢ x    x ⋅y⎥
⎢          ⎥
⎢ 2      2 ⎥
⎣x ⋅y   y  ⎦

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?