<jupyter_start><jupyter_text>【問題1】1次配列$ x $が-50から50の範囲で次の式を考えます。  $$y = \frac{1}{2}x + 1$$ -50から50まで0.1間隔のxを表すndarrayと、各要素に対するyを表すndarrayを作成してください。<jupyter_code>x = np.arange(-50, 50.1, 0.1)
y = 0.5*x + 1<jupyter_output><empty_output><jupyter_text>【問題2】配列の結合問題1で作成したndarrayを結合し、(1001, 2)の形の配列にしてください。0列目にx、1列目にyが来るようにします。<jupyter_code>array = np.hstack((x[:,np.newaxis], y[:,np.newaxis]))
array<jupyter_output><empty_output><jupyter_text>【問題3】勾配を求める各x座標における勾配を求めます。ここで勾配はyの変化量をxの変化量で割ることで計算します。<jupyter_code>d_x = x[1:] - x[:-1]
d_y = y[1:] - y[:-1]
grad = d_y / d_x
grad.shape<jupyter_output><empty_output><jupyter_text>【問題4】グラフを描く1次関数のグラフをMatplotlibを用いて描いてください。また、それとは別に横軸をx、縦軸を勾配としたグラフも描いてください。<jupyter_code>plt.plot(x, y, label='y')
plt.plot(x[:-1], grad, label='grad')
plt.legend();<jupyter_output><empty_output><jupyter_text>【問題5】pythonの関数化問題1から問題3までの範囲をまとめて行うPythonの関数を雛形を参考に作成してください。  そして、以下の3式の勾配を0.1間隔で求めてndarrayで出力してください。$$y = x^{2} \quad (-50\leq x \leq 50)\\y = 2x^{2}+2^{x} \quad (-50\leq x \leq 50)\\y = sin(x^{\frac{1}{2}}) \quad (0\leq x \leq 50)$$また、問題4と同様にグラフを描いてください。  ndarrayに対して三角関数のsinの計算を行うには np.sin()を用います。<jupyter_code>def compute_gradient(function, x_range=(-50, 50.1, 0.1)):
    x = np.arange(*x_range)
    y = function(x)
    array_xy = np.hstack((x[:,np.newaxis], y[:,np.newaxis]))
    gradient = (y[1:] - y[:-1]) / (x[1:] - x[:-1])
    return array_xy, gradient
def function1(array_x):
    array_y = array_x**2
    return array_y

def function2(array_x):
    array_y = 2 * array_x**2 + 2**array_x
    return array_y

def function3(array_x):
    array_y = np.sin(array_x**0.5)
    return array_y
array_xy_1, grad_1 = compute_gradient(function1, x_range=(-50, 50.1, 0.1))
array_xy_2, grad_2 = compute_gradient(function2, x_range=(-50, 50.1, 0.1))
array_xy_3, grad_3 = compute_gradient(function3, x_range=(0, 50.1, 0.1))
plt.plot(array_xy_1[:,0], array_xy_1[:,1], label='y')
plt.plot(array_xy_1[:-1,0], grad_1, label='grad')
plt.legend();
plt.plot(array_xy_2[:,0], array_xy_2[:,1], label='y')
plt.plot(array_xy_2[:-1,0], grad_2, label='grad')
plt.legend();
plt.plot(array_xy_3[:,0], array_xy_3[:,1], label='y')
plt.plot(array_xy_3[:-1,0], grad_3, label='grad')
plt.legend();<jupyter_output><empty_output><jupyter_text>【問題6】最小値を求める問題5で扱った関数のyの最小値を求めます。xの範囲も問題5と同様とします。  今回は勾配降下法ではなく、ndarrayのminメソッド、argminメソッドを用いてください。  minメソッドは最小値を、argminメソッドは最小値のインデックスを取得することができます。  また、最小のyをとる前後の勾配を表示してください。<jupyter_code>minimum_1 = np.min(array_xy_1[:,1])
argminimum_1 = np.argmin(array_xy_1[:,1])
minimum_1, argminimum_1
print(grad_1[499:502])
minimum_2 = np.min(array_xy_2[:,1])
argminimum_2 = np.argmin(array_xy_2[:,1])
minimum_2, argminimum_2
print(grad_2[497:500])
minimum_3 = np.min(array_xy_3[:,1])
argminimum_3 = np.argmin(array_xy_3[:,1])
minimum_3, argminimum_3
print(grad_3[221:224])<jupyter_output>[-0.00063884  0.00048745  0.00160612]
{'fraction_non_alphanumeric': 0.1848357791754018, 'fraction_numerical': 0.07477288609364081, 'mean_word_length': 7.675757575757576, 'pattern_counts': {'":': 0, '<': 24, '<?xml version=': 0, '>': 24, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '164283', 'license': 'Unlicense', 'n_tokens_mistral': 1708, 'n_tokens_neox': 1623, 'n_words': 156, 'path': 'week2/week2-work1.ipynb', 'repo_name': 'YasumasaNamba/diveintocode_ml', 'size': '2862'}