mpmath中的mpf是什么意思?
What does mpf in the mpmath mean?
x
在下面有值:
[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')]
代码 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()
一切都很好
代码 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()
发生错误,说:不能将序列乘以 'float' 类型的非整数。
所以在代码 3 中,我将 2. 更改为 2
代码 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()
这次说:x 和 y 必须有相同的第一个维度。
终于,我发现我可以用np.array
把x变成一个数组,所有的麻烦都没有了。
代码 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()
谁能给我解释一下,x
代表什么,什么是mpf。为什么上面的代码会这样? 如果 x 不是数值数组,为什么可以用来绘图?如果是数组,为什么不能乘以一个数呢?我很困惑!
x
是 mp
-浮点数的数组;您用它制作的 np.array 可以以普通 python 数组不能使用的方式使用。
mpf 是 mpmath 库中的 class 来表示 real float
但它不是 int,也不是 float ...
in 1-2) 你试过y=mp.mpf(2).*x
吗?
在 3)
我还没有看到 int 与 mpf 的乘法是如何定义的,但如果它与字符串一起工作,那么在这种情况下 y 将不会具有相同的维度。
编辑:事实上,2*x
给了我扩展数组 [x,x]
在 4)
它有效,因为你没有使用 mpf
数字,而是一个 numpy 数组,它有你写的定义的乘法运算。
你的 x
只是一个列表:
>>> x = mp.arange(0, 1, 0.1)
>>> type(x)
list
这意味着您得到了正常的列表行为:
>>> x * 2.0
TypeError: can't multiply sequence by non-int of type 'float'
>>> y = [e * 2.0 for e in x]
这将转换为 NumPy 对象数组:
>>> np.array(x).dtype
dtype('O')
这意味着您可以进行逐元素操作:
>>> 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)
可以使用列表或 NumPy 数组作为输入。
mpmath 提供了自己的数值类型。 class mpf 将用于实际浮点数(mpc 用于复数浮点数等)。
您可以从不同的其他 python 类型(如字符串、整数、浮点数)和其他 mpf 实例创建 mph 实例。
mpf 实例的精度将由全局 mpmath 工作精度设置。
有关更多信息,您可以访问 SymPy Modules Reference
x
在下面有值:
[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')]
代码 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()
一切都很好
代码 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()
发生错误,说:不能将序列乘以 'float' 类型的非整数。 所以在代码 3 中,我将 2. 更改为 2
代码 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()
这次说:x 和 y 必须有相同的第一个维度。
终于,我发现我可以用np.array
把x变成一个数组,所有的麻烦都没有了。
代码 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()
谁能给我解释一下,x
代表什么,什么是mpf。为什么上面的代码会这样? 如果 x 不是数值数组,为什么可以用来绘图?如果是数组,为什么不能乘以一个数呢?我很困惑!
x
是 mp
-浮点数的数组;您用它制作的 np.array 可以以普通 python 数组不能使用的方式使用。
mpf 是 mpmath 库中的 class 来表示 real float
但它不是 int,也不是 float ...
in 1-2) 你试过y=mp.mpf(2).*x
吗?
在 3)
我还没有看到 int 与 mpf 的乘法是如何定义的,但如果它与字符串一起工作,那么在这种情况下 y 将不会具有相同的维度。
编辑:事实上,2*x
给了我扩展数组 [x,x]
在 4)
它有效,因为你没有使用 mpf
数字,而是一个 numpy 数组,它有你写的定义的乘法运算。
你的 x
只是一个列表:
>>> x = mp.arange(0, 1, 0.1)
>>> type(x)
list
这意味着您得到了正常的列表行为:
>>> x * 2.0
TypeError: can't multiply sequence by non-int of type 'float'
>>> y = [e * 2.0 for e in x]
这将转换为 NumPy 对象数组:
>>> np.array(x).dtype
dtype('O')
这意味着您可以进行逐元素操作:
>>> 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)
可以使用列表或 NumPy 数组作为输入。
mpmath 提供了自己的数值类型。 class mpf 将用于实际浮点数(mpc 用于复数浮点数等)。 您可以从不同的其他 python 类型(如字符串、整数、浮点数)和其他 mpf 实例创建 mph 实例。 mpf 实例的精度将由全局 mpmath 工作精度设置。
有关更多信息,您可以访问 SymPy Modules Reference