You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Python中表达式转浮点数失败及元组整数比较报错问题

两类Python代码报错的解决方案

一、"Cannot convert expression to floating python" 错误修复

错误代码

#This is my code
import numpy as np
import sympy as sp
n=3
y = [sp.symbols('y%d' % i) for i in range(8*n-4)]
#x=sp.symbols('x:n')
x=np.zeros((1,n))
for i in range(n):
    x[i]=sp.gamma(y[i])
print(x)

错误原因

np.zeros((1,n)) 创建的是浮点类型数组,而sp.gamma(y[i])返回的是SymPy符号表达式,无法直接转换为浮点数存储到numpy数组中。

修复方案

改用SymPy矩阵或Python列表存储符号表达式,避免numpy数组与SymPy符号类型冲突:

import numpy as np
import sympy as sp
n=3
y = [sp.symbols('y%d' % i) for i in range(8*n-4)]
# 用SymPy矩阵存储符号结果
x = sp.Matrix.zeros(1, n)
for i in range(n):
    x[i] = sp.gamma(y[i])
print(x)

# 或用Python列表存储
# x = []
# for i in range(n):
#     x.append(sp.gamma(y[i]))
# print(x)

二、"'<' not supported between instances of 'tuple' and 'int'" 错误修复

错误代码

import numpy as np
import sympy as sp
from sympy.matrices import  zeros
from gekko import GEKKO    
# create variables
n=3;z=1

m = GEKKO(remote=False)
x = [sp.symbols('x%d' % i) for i in range(8*n-4)]
#x=sp.symbols('x:20')
t=sp.symbols('t ')

B=np.zeros((n,n))
number = range(n)
for i in number:
   for j in number:
       if i<j :
           B[i][j]=0
       else :
           B[i][j]=sp.factorial(i+j)/(2**j*sp.factorial(j)*sp.factorial(i-j))
PS=[x[0:n]];PI=[x[n:2*n]];PH=[x[2*n:3*n]];PL=[x[3*n:4*n]]
TS=[[1]];TI=[[1]];TH=[[1]];TL=[[1]]
for i in range(n-1):
    TS.append([t**(x[4*n+i]+i+1)])   
    TI.append([t**(x[5*n+i-1]+i+1)])
    TH.append([t**(x[6*n+i-2]+i+1)])
    TL.append([t**(x[7*n+i-3]+i+1)])
S=np.dot(np.dot(PS,B),TS)
I=np.dot(np.dot(PI,B),TI)
H=np.dot(np.dot(PH,B),TH)
L=np.dot(np.dot(PL,B),TL)
DS0=zeros((n,n))
#DI0=np.zeros((n,n));DH0=np.zeros((n,n));DL0=np.zeros((n,n))
for i in number:
    if i==0:
       DS0[i][i]=0
       #DI0[i][i]=0
       #DH0[i][i]=0
      # DL0[i][i]=0
    else:
     DS0[i][i]=sp.gamma(x_4*n+i+1)/sp.gamma(x_4*n+i+1-z)
       
#ss=sp.integrate(s[0][0],(t,0,1))
print (DS0)       

错误原因

  1. 变量名笔误:x_4是未定义变量,实际应访问x[4*n+i],未定义的x_4导致表达式类型混乱,触发比较错误;
  2. numpy与SymPy类型冲突:B用np.zeros创建浮点数组,但赋值的是SymPy符号表达式;PS等为嵌套列表结构,np.dot无法正确处理符号与数组的混合运算;
  3. 索引偏移风险:循环中TI等的索引包含i-1,易出现逻辑偏移,同时混合类型运算会引发隐性类型错误。

修复方案

import numpy as np
import sympy as sp
from sympy.matrices import zeros
from gekko import GEKKO    
# create variables
n=3; z=1

m = GEKKO(remote=False)
x = [sp.symbols('x%d' % i) for i in range(8*n-4)]
t=sp.symbols('t')

# 用SymPy矩阵存储符号矩阵B,避免类型冲突
B = zeros(n, n)
number = range(n)
for i in number:
   for j in number:
       if i < j :
           B[i,j] = 0
       else :
           B[i,j] = sp.factorial(i+j)/(2**j * sp.factorial(j) * sp.factorial(i-j))

# 转换为SymPy矩阵,适配符号矩阵运算
PS = sp.Matrix(x[0:n]).reshape(n,1)
PI = sp.Matrix(x[n:2*n]).reshape(n,1)
PH = sp.Matrix(x[2*n:3*n]).reshape(n,1)
PL = sp.Matrix(x[3*n:4*n]).reshape(n,1)

# 构建TS等矩阵,统一用SymPy矩阵操作
TS = sp.Matrix([[1]])
for i in range(n-1):
    TS = TS.row_insert(i+1, sp.Matrix([[t**(x[4*n+i]+i+1)]]))   

TI = sp.Matrix([[1]])
for i in range(n-1):
    TI = TI.row_insert(i+1, sp.Matrix([[t**(x[5*n+i]+i+1)]]))   

TH = sp.Matrix([[1]])
for i in range(n-1):
    TH = TH.row_insert(i+1, sp.Matrix([[t**(x[6*n+i]+i+1)]]))   

TL = sp.Matrix([[1]])
for i in range(n-1):
    TL = TL.row_insert(i+1, sp.Matrix([[t**(x[7*n+i]+i+1)]]))   

# 使用SymPy原生矩阵乘法替代numpy.dot
S = PS.T * B * TS
I = PI.T * B * TI
H = PH.T * B * TH
L = PL.T * B * TL

DS0 = zeros(n,n)
for i in number:
    if i == 0:
       DS0[i,i] = 0
    else:
        # 修正变量名笔误
        numerator = sp.gamma(x[4*n+i] + i + 1)
        denominator = sp.gamma(x[4*n+i] + i + 1 - z)
        DS0[i,i] = numerator / denominator

print(DS0)

关键修复点

  • 统一使用SymPy矩阵处理符号运算,避免numpy与SymPy的类型冲突;
  • 修正x_4为x[4*n+i]的笔误;
  • 调整索引逻辑,移除不必要的负数偏移;
  • 用SymPy原生矩阵乘法(*)替代np.dot,适配符号运算场景。

内容的提问来源于stack exchange,提问作者hojat saeidi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:52:33