前提・実現したいこと
上記の式において
Zを10~100000まで100ずつ増加させた場合のX,Yをグラフとしてプロットしたいです。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-10-60a3432b3cf4> in <module> 80 Z = Z+100 81 ---> 82 plt.plot(X, Y) 83 plt.show() ~\anaconda3\lib\site-packages\matplotlib\pyplot.py in plot(scalex, scaley, data, *args, **kwargs) 2759 @docstring.copy(Axes.plot) 2760 def plot(*args, scalex=True, scaley=True, data=None, **kwargs): -> 2761 return gca().plot( 2762 *args, scalex=scalex, scaley=scaley, **({"data": data} if data 2763 is not None else {}), **kwargs) ~\anaconda3\lib\site-packages\matplotlib\axes\_axes.py in plot(self, scalex, scaley, data, *args, **kwargs) 1645 """ 1646 kwargs = cbook.normalize_kwargs(kwargs, mlines.Line2D) -> 1647 lines = [*self._get_lines(*args, data=data, **kwargs)] 1648 for line in lines: 1649 self.add_line(line) ~\anaconda3\lib\site-packages\matplotlib\axes\_base.py in __call__(self, *args, **kwargs) 214 this += args[0], 215 args = args[1:] --> 216 yield from self._plot_args(this, kwargs) 217 218 def get_next_color(self): ~\anaconda3\lib\site-packages\matplotlib\axes\_base.py in _plot_args(self, tup, kwargs) 343 f"have shapes {x.shape} and {y.shape}") 344 if x.ndim > 2 or y.ndim > 2: --> 345 raise ValueError(f"x and y can be no greater than 2-D, but have " 346 f"shapes {x.shape} and {y.shape}") 347 if x.ndim == 1: ValueError: x and y can be no greater than 2-D, but have shapes (1000, 1, 1) and (1000, 1, 1)
該当のソースコード
python
1import numpy as np 2import matplotlib.pyplot as plt 3 4 5A = np.array([[0,0,0,1], 6[15.625,6.25,2.5,1], 7[125,25,5,1], 8[421.875,56.25,7.5,1], 9[1000,100,10,1], 10[1953.125,156.25,12.5,1], 11[3375,225,15,1], 12[5359.375,306.25,17.5,1], 13[8000,400,20,1], 14[11390.625,506.25,22.5,1], 15[15625,625,25,1], 16[20796.875,756.25,27.5,1], 17[27000,900,30,1], 18[34328.125,1056.25,32.5,1], 19[42875,1225,35,1], 20[52734.375,1406.25,37.5,1], 21[64000,1600,40,1], 22[76765.625,1806.25,42.5,1], 23[91125,2025,45,1], 24[107171.875,2256.25,47.5,1], 25[125000,2500,50,1]]) 26 27y = np.array([[840], 28[856], 29[848], 30[844], 31[860], 32[872], 33[884], 34[912], 35[936], 36[948], 37[956], 38[980], 39[1000], 40[1020], 41[1028], 42[1032], 43[1036], 44[1040], 45[1040], 46[1040], 47[1044]]) 48 49C = np.array([[0,0,0.00293372,0], 50[0.055007241,0.014668598,0.00293372,0], 51[0.220028964,0.029337195,0.00293372,0], 52[0.49506517,0.044005793,0.00293372,0], 53[0.880115857,0.05867439,0.00293372,0], 54[1.375181027,0.073342988,0.00293372,0], 55[1.980260679,0.088011586,0.00293372,0], 56[2.695354813,0.102680183,0.00293372,0], 57[3.520463429,0.117348781,0.00293372,0], 58[4.455586527,0.132017379,0.00293372,0], 59[5.500724108,0.146685976,0.00293372,0], 60[6.65587617,0.161354574,0.00293372,0], 61[7.921042715,0.176023171,0.00293372,0], 62[9.296223742,0.190691769,0.00293372,0], 63[10.78141925,0.205360367,0.00293372,0], 64[12.37662924,0.220028964,0.00293372,0], 65[14.08185372,0.234697562,0.00293372,0], 66[15.89709267,0.24936616,0.00293372,0], 67[17.82234611,0.264034757,0.00293372,0], 68[19.85761403,0.278703355,0.00293372,0], 69[22.00289643,0.293371952,0.00293372,0]]) 70 71X = [] 72Y = [] 73Z = 10 74while Z <= 100000 : 75 G = np.dot(A.T,A)+Z*np.dot(C.T,C) 76 H = np.dot(A.T,y) 77 x = np.dot(np.linalg.inv(G),H) 78 X.append(np.dot(y.T,y)-np.dot(np.dot(np.dot(2,x.T),A.T),y)+np.dot(np.dot(np.dot(x.T,A.T),A),x)) 79 Y.append(np.dot(np.dot(np.dot(x.T,C.T),C),x)) 80 Z = Z+100 81 82plt.plot(X, Y) 83plt.show()
試したことなど
matlabで同様の計算をした場合問題なくプロット出来たのですが、
pythonで同じ計算を行うとこのようになってしまいまい、
どこが間違っているのかわからず困っています。
補足情報(FW/ツールのバージョンなど)
使用環境:windows64bit, Anaconda
> Y.append(np.dot(np.dot(x.T,C.T),C),x)
もう一回np.dot()が必要なのでは?
np.dot()を追加したところ、TypeErrorがなくなりました。
ご指摘有難う御座います。
Zを10~100000まで100ずつ増加させた場合、に相当するコードはどこでしょうか?
また、10~100000まで100ずつ増加、というのは、10、110、210、310、・・99910 とういことでしょうか?
>Zを10~100000まで100ずつ増加させた場合、に相当するコードはどこでしょうか?
間違えて消してしまっていたので、修正で追加しました。
またその際にエラーメッセージの方も変化した為、修正しました。ご指摘有難う御座います。
>また、10~100000まで100ずつ増加、というのは、10、110、210、310、・・99910 とういことでしょうか?
はいその解釈で間違いありません。
ありがとうございます。その解釈で回答しております。
回答1件
あなたの回答
tips
プレビュー