Как я могу избежать генератора в Python - PullRequest
0 голосов
/ 09 июня 2019

Я хочу построить функцию в Python, но я не могу это сделать. Я запускаю следующий код, но я получаю сообщение об ошибке, в котором говорится, что я не могу умножить генератор и число с плавающей запятой вместе. Откуда это?

from math import *
import matplotlib.pyplot as plt
t=0.1
cd=t*exp(-t/2)
tau=10
nt=100
v=0.01
w=0.9
u=0.4
s0=10
p=5

for i in range (1,10):
    sigma= u/(w+(s0/(p*cd)))
    print(sigma)
    C= lambda ksi: cd * (1-exp(((u-w * sigma)/v)*ksi))
    plt.plot([-10,-9,-8,-7,-6,-5,-4,-3,-2,-1],[C(i for i in range (-10,-1))])
    plt.xlabel(ksi)
    plt.ylabel(concentration)
    plt.title("tumeur avec regénessence")
    plt.legend()
    plt.show()
    t+=tau/nt

это ошибка, которую я получаю

Traceback (most recent call last):
  File "C:\Users\ilyes\Downloads\tumeur_avec_regénesence.py", line 18, in <module>
    plt.plot([-10,-9,-8,-7,-6,-5,-4,-3,-2,-1],[C(i for i in range (-10,-1))])
  File "C:\Users\ilyes\Downloads\tumeur_avec_regénesence.py", line 17, in <lambda>
    C= lambda ksi: cd * (1-exp(((u-w * sigma)/v)*ksi))
  TypeError: unsupported operand type(s) for *: 'float' and 'generator'

Ответы [ 2 ]

2 голосов
/ 09 июня 2019

использование

plt.plot([-10,-9,-8,-7,-6,-5,-4,-3,-2,-1],[C(i) for i in range (-10, 0)])

вместо

plt.plot([-10,-9,-8,-7,-6,-5,-4,-3,-2,-1],[C(i for i in range (-10,-1))])

объяснение: вы хотите применить C к каждому значению, отсутствующему в списке отверстий сразу. диапазон (-10, -1) дает вам значения -10 <= v < -1, но вы хотите, чтобы -1 был включен.

0 голосов
/ 09 июня 2019

Используйте NumPy.

import numpy as np
import matplotlib.pyplot as plt

tau=10
nt=100
v=0.01
w=0.9
u=0.4
s0=10
p=5

ksi = np.arange(-10,0)

for t in np.arange(1,10)*tau/nt:
    cd = t*np.exp(-t/2)
    sigma = u/(w+(s0/(p*cd)))
    C = lambda ksi: cd * (1-np.exp(((u-w * sigma)/v)*ksi))

    plt.plot(ksi, C(ksi), label=f"t = {t}")

plt.xlabel("ksi")
plt.ylabel("concentration")
plt.title("tumeur avec regénessence")
plt.legend()
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...