x
en lo siguiente tiene el valor:
[mpf('0.0') mpf('0.10000000000000001') mpf('0.20000000000000001')
mpf('0.30000000000000004') mpf('0.40000000000000002') mpf('0.5')
mpf('0.60000000000000009') mpf('0.70000000000000007')
mpf('0.80000000000000004') mpf('0.90000000000000002')]
Código 1
import numpy as np
import mpmath as mp
import matplotlib.pyplot as plt
x = mp.arange(0,1,0.1)
y=x
plt.plot(x,y)
plt.show()
Todo esta bien
Código 2
import numpy as np
import mpmath as mp
import matplotlib.pyplot as plt
x = mp.arange(0,1,0.1)
y = 2.*x
plt.plot(x,y)
plt.show()
Se produce un error, dice: no se puede multiplicar la secuencia por no int del tipo 'float'. Entonces, en el código 3, cambio 2. a 2
Código 3
import numpy as np
import mpmath as mp
import matplotlib.pyplot as plt
x = mp.arange(0,1,0.1)
y = 2*x
plt.plot(x,y)
plt.show()
Esta vez dice: x e y deben tener la misma primera dimensión.
Finalmente, descubrí que puedo usar np.array
para hacer que x sea una matriz, todo el problema desapareció.
Código 4
import numpy as np
import mpmath as mp
import matplotlib.pyplot as plt
x = mp.arange(0,1,0.1)
y = 2.*np.array(x)
plt.plot(x,y)
plt.show()
¿Puede alguien explicarme qué representa x
, qué es mpf? ¿Por qué los códigos anteriores se comportan así? Si x no es una matriz numérica, ¿por qué puede usarse para trazar? Si es una matriz, ¿por qué no puede multiplicarse por un número? ¡Estoy muy confundido!
4 respuestas
Tu x
es solo una lista:
>>> x = mp.arange(0, 1, 0.1)
>>> type(x)
list
Eso significa que obtienes el comportamiento normal de la lista:
>>> x * 2.0
TypeError: can't multiply sequence by non-int of type 'float'
>>> y = [e * 2.0 for e in x]
Esto se convierte en una matriz de objetos NumPy:
>>> np.array(x).dtype
dtype('O')
Esto significa que puede realizar operaciones basadas en elementos:
>>> np.array(x) * 2000.0
array([mpf('0.0'), mpf('200.0'), mpf('400.0'), mpf('600.00000000000011'),
mpf('800.0'), mpf('1000.0'), mpf('1200.0000000000002'),
mpf('1400.0000000000002'), mpf('1600.0'), mpf('1800.0')], d
plt.plot(x,y)
puede usar listas o matrices NumPy como entrada.
Mpmath proporciona sus propios tipos numéricos. La clase mpf se usará para flotación real (mpc para flotación compleja, etc.). Puede crear instancias de mph a partir de otros tipos de python como cadenas, enteros, flotantes y también desde otras instancias mpf. La precisión de una instancia de mpf será establecida por la precisión de trabajo global de mpmath.
Para obtener más información, visite Referencia de módulos SymPy
Mpf es una clase en la biblioteca mpmath para representar real float
pero no es un int, ni flotante ...
En 1-2) ¿Has probado con y=mp.mpf(2).*x
?
En 3) No he visto cómo se define la multiplicación de int con mpf, pero si funciona como con una cadena, entonces y en ese caso no tendría la misma dimensión. EDITAR: de hecho, 2*x
me da la matriz extendida [x,x]
En 4) funciona, porque no estás usando números mpf
, sino una matriz numpy, que tiene la operación de multiplicación definida como la escribiste.
x
es una matriz de mp
- flotantes; El np.array que hizo de él se puede usar de una manera que una matriz normal de Python no puede.
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.