所以我试图生成一个图表,展示简单和复合兴趣之间的区别。我遇到的问题是我得到一个错误:“x和y必须具有相同的第一维”。我在这里看起来似乎有类似的问题,但是我很难将这些解决方案转移到我的实际问题上。我查看了t和fv_2和fv_3的大小/长度以及尺寸都匹配; fv_1只是一条直线(见代码)。
如果有人知道我哪里出错了,建议,建议将不胜感激!
import numpy as np
import matplotlib.pylab as plt
pv=1000
r=0.08
n=10
t=np.linspace(0,n,n)
fv_1=np.ones(len(t)*pv) #horizontal line
fv_2=pv*(1+r*t) #simple interest
fv_3=pv*pow(1+r,t) #compounded interest
plt.title("Simple vs. Compounded Interest Rate")
plt.xlabel("Number of Years, t")
plt.ylabel("Pounds Sterling, £")
plt.xlim(0,11)
plt.ylim(800,2200)
plt.plot(t,fv_1,'b-')
plt.plot(t,fv_2,'g--')
plt.plot(t,fv_3,'r-')
plt.show()
答案 0 :(得分:0)
尝试做:
fv_1=np.ones(len(t))*pv
说明:您的代码在错误的位置有)
。在您的示例中,fv_1
中的元素数量不等于t
中的元素数量。您最有可能需要len(t)
个数量为pv
的元素。
答案 1 :(得分:0)
fv_1的大小为1000,t的大小为10
错误在于:plt.plot(t,fv_1,'b-')
print len(t)
print len(fv_1)
print len(fv_2)
print len(fv_3)
输出:
10
10000
10
10
修复此
np.ones(len(t))*pv
答案 2 :(得分:0)
所以我接受了你的建议并写了
fv_1=np.ones(len(t))*pv.
产生了这个错误:"只有长度为1的数组才能转换为Python标量"
摆脱:
fv_3=pv*pow((1+r),t)
并将其替换为等效的:
fv_3=pv*(1+r)**t
一般生成正确的曲线和图。
再次感谢@Roberto Mena& @yper