Here are my answers:
1.plot(x, [x**3-1/x, 4*x-4], ‘x’, ‘f(x)’, legend=[‘f(x)’, ‘Tangent line (x=1)’])
2.[6x_1, 5e^(x_2)]
3.let y=f(x), Df(x) = x/y
4.similar to 2.4.11
4.similar to 2.4.11
where is the 2.4.11 ?
为什么可以给 plot 中的 Y 传两个参数([f(x), 2 * x - 3])呢?
def set_figsize(figsize=(3.5, 2.5)):
"""Set the figure size for matplotlib."""
use_svg_display()
d2l.plt.rcParams['figure.figsize'] = figsize
上述函数里为何要写成 d2l.plt.rcParams 呢?而不是 plt.rcParams ?我看源码里写了 plt 的导入,那么添加前缀 d2l 是否多余?
原来是给 Y 传入一个列表… 不过 2 * x - 3 错了,应该是 6*x−4,
然后自己太菜了,发一个注释版的,希望帮到和我一样菜的~
if legend is None:
legend = []
# set_figsize(figsize)
display.set_matplotlib_formats('svg')
d2l.plt.rcParams['figure.figsize'] = figsize # matplotlibrc动态配置
# 如果未传入axes的值则获取画布当前的axes(本例会默认创建)
axes = axes if axes else d2l.plt.gca()
# 如果 `X` 有一个轴,输出True
def has_one_axis(X):
return (hasattr(X, "ndim") and X.ndim == 1 or # X有ndim属性且其值为1
isinstance(X, list) and not hasattr(X[0], "__len__")) # X为列表且其首个元素没有"__len__"属性
if has_one_axis(X):
# 如果是一个轴,将其列表化
X = [X]
if Y is None:
# 如果没有传入Y参数,X为包含X长度个空列表的大列表,Y为X
X, Y = [[]] * len(X), X
elif has_one_axis(Y):
# 如果 Y 只有一个轴,将其列表化
Y = [Y]
if len(X) != len(Y):
# 如果X的长度和Y的长度不一样,X改为Y长度数个X
X = X * len(Y)
axes.cla() # 清除axes
for x, y, fmt in zip(X, Y, fmts):
if len(x): # 如果X的元素x不为空
axes.plot(x, y, fmt)
else:
axes.plot(y, fmt)
有谁可以帮助解释一下第3道练习题的答案吗?我还是不能理解。多谢!
2 * x - 3是没错的。
f(x) = 3 * x ** 2 - 4 * x 在(1, -1)点的切线斜率 k = f '(1) = 2,该切线经过(1, -1),因此在该点的切线方程为y = 2 * x - 3
请问第三题应该怎么思考,f(x)不是x的L2范数吗?能像普通数学那样算吗,
Df(x) = 1/2||x||, 是这样吗?
梯度是一个向量,写成向量的形式就对了。。。。。。。。。。。。。。。。
我觉得这不是应该这么写?
總算有正確的人,簡化點寫
跟 相同。
在 set_axes
函数中
if legend:
axes.legend(legend)
axes.grid()
是用来干嘛的啊
和上面的参数设置一样,不过不一定每个图都有图例,这个判断相当于if legend!=0,即:如果有legend参数输入的话,设置axes.legend为输入的参数(legend)。
axes.grid()是按照坐标轴的步进(step)画网格线(grid)。
在下面的画2x-3的时候就可以看到左上角的图例以及网格线。
我也是第一次看,希望可以帮到你。
//我没系统学过py,上面的判断是用的c语言的格式,抱歉。