teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

10

コードの編集

2020/02/14 13:54

投稿

alpha_high
alpha_high

スコア6

title CHANGED
File without changes
body CHANGED
@@ -36,7 +36,7 @@
36
36
  def cont(func):
37
37
 
38
38
  X,Y=np.meshgrid(np.linspace(-5,5,100),np.linspace(-5,5,100))
39
- t,_=np.array([X,Y])
39
+ t=np.array([X,Y])
40
40
  Z,_=func(t)
41
41
  Z=np.matrix(Z)
42
42
  #print("length",X.shape[1],Y.shape[1],Z.shape[0],Y.shape[1])
@@ -90,7 +90,16 @@
90
90
 
91
91
  このまま実行をすると、
92
92
  ```error
93
+ Traceback (most recent call last):
94
+ File "stud2.py", line 65, in <module>
95
+ cont(func)
96
+ File "stud2.py", line 18, in cont
97
+ Z,_=func(t)
98
+ File "stud2.py", line 34, in rosenbrock
99
+ gradient = np.matrix([(-400*x[0]*(x[1]-x[0]**2)-2*(1-x[0])), (200*(x[1]-x[0]*x[0]))]).T
100
+ File "/Users/mizuhotakayama/.pyenv/versions/3.8.1/lib/python3.8/site-packages/numpy/matrixlib/defmatrix.py", line 151, in __new__
101
+ raise ValueError("matrix must be 2-dimensional")
93
- TypeError: Input z must be at least a 2x2 array.
102
+ ValueError: matrix must be 2-dimensional
94
103
  ```
95
104
  とエラーが出てしまいます。
96
105
  XとYのdimension数を合わせなければいけないと思い、

9

文法の修正をしました。

2020/02/14 13:54

投稿

alpha_high
alpha_high

スコア6

title CHANGED
File without changes
body CHANGED
@@ -4,10 +4,14 @@
4
4
 
5
5
  下記のように、プロット関数に直接、関数を書いて出力すると、等高線がかけるのですが、
6
6
  ```python
7
+ import numpy as np
8
+ import matplotlib.pyplot as plt
9
+
7
-  rosenbrockfunction = lambda x,y: (1-x)**2+100*(y-x**2)**2
10
+ rosenbrockfunction = lambda x,y: (1-x)**2+100*(y-x**2)**2
8
-  X,Y=np.meshgrid(np.linspace(-5,5,100),np.linspace(-5,5,100))
11
+ X,Y=np.meshgrid(np.linspace(-5,5,100),np.linspace(-5,5,100))
9
-  Z=rosenbrockfunction(X,Y)
12
+ Z=rosenbrockfunction(X,Y)
10
-  cs=plt.contour(X,Y,Z,np.logspace(0,3.5,7,base=10))
13
+ cs=plt.contour(X,Y,Z,np.logspace(0,3.5,7,base=10))
14
+ plt.show()
11
15
  ```
12
16
 
13
17
  ですが、

8

タイトルの変更

2020/02/14 08:20

投稿

alpha_high
alpha_high

スコア6

title CHANGED
@@ -1,1 +1,1 @@
1
- パイソンにて、等高線のプロットがしたいです 。100x100行列X, 100x100行列のYから、100x100のzの式を出したいのすが、配列の要素数が合いません
1
+ パイソンにて、等高線のプロットがしたいです 。プログラム、配列の要素数が合わなというエラーが出てい
body CHANGED
File without changes

7

タイトルの編集をしました。

2020/02/14 04:20

投稿

alpha_high
alpha_high

スコア6

title CHANGED
@@ -1,1 +1,1 @@
1
- パイソンにて、等高線のプロットがしたいです 。100x100行列のX, 100x100行列のYから、100x100のzの式を出したいのですが、配列の要素すうが合いません。
1
+ パイソンにて、等高線のプロットがしたいです 。100x100行列のX, 100x100行列のYから、100x100のzの式を出したいのですが、配列の要素が合いません。
body CHANGED
File without changes

6

隙間を消しました。

2020/02/14 01:19

投稿

alpha_high
alpha_high

スコア6

title CHANGED
File without changes
body CHANGED
@@ -16,8 +16,7 @@
16
16
  _配列数が合いません
17
17
  とエラーが出ます。
18
18
 
19
- ```uncon
19
+ ```python
20
-
21
20
  import math
22
21
  import utils
23
22
  import utils2
@@ -84,12 +83,7 @@
84
83
  sys.exit(1)
85
84
  ```
86
85
 
87
- ```
88
86
 
89
-
90
-
91
- ```
92
-
93
87
  このまま実行をすると、
94
88
  ```error
95
89
  TypeError: Input z must be at least a 2x2 array.

5

試したことを足しました。

2020/02/14 01:06

投稿

alpha_high
alpha_high

スコア6

title CHANGED
File without changes
body CHANGED
@@ -109,4 +109,9 @@
109
109
  上下のプログラムで、関数を分けて居るかどうかだけなのに、何故答えが出せないのか、と悩んでいます。
110
110
  リストや行列への変換も、考えられるペアで変えてみましたが、出来ませんでした。
111
111
 
112
+ また、Zを100x100行列で静的行列にしてから計算しても、出力されませんでした。
113
+ ```
114
+ Z=[[0 for I in range(100)] for j in range(100)]
115
+ ```
116
+
112
117
  私のコードの間違いを教えていただけないでしょうか。

4

コードを動くように修正しました。申し訳ありません。

2020/02/14 01:06

投稿

alpha_high
alpha_high

スコア6

title CHANGED
File without changes
body CHANGED
@@ -18,9 +18,20 @@
18
18
 
19
19
  ```uncon
20
20
 
21
+ import math
22
+ import utils
23
+ import utils2
24
+ import numpy as np
25
+ import sys
26
+ import matplotlib.pyplot as plt
27
+ from mpl_toolkits.mplot3d import Axes3D
28
+ import sys
29
+ import csv
30
+ import os
21
31
 
32
+
22
33
  def cont(func):
23
-
34
+
24
35
  X,Y=np.meshgrid(np.linspace(-5,5,100),np.linspace(-5,5,100))
25
36
  t,_=np.array([X,Y])
26
37
  Z,_=func(t)
@@ -56,6 +67,7 @@
56
67
 
57
68
 
58
69
  nTrails=10
70
+ testFuncs = [rosenbrock]
59
71
 
60
72
  for _, func in enumerate(testFuncs):
61
73
 

3

追加で編集しました。

2020/02/14 00:33

投稿

alpha_high
alpha_high

スコア6

title CHANGED
File without changes
body CHANGED
@@ -19,6 +19,19 @@
19
19
  ```uncon
20
20
 
21
21
 
22
+ def cont(func):
23
+
24
+ X,Y=np.meshgrid(np.linspace(-5,5,100),np.linspace(-5,5,100))
25
+ t,_=np.array([X,Y])
26
+ Z,_=func(t)
27
+ Z=np.matrix(Z)
28
+ #print("length",X.shape[1],Y.shape[1],Z.shape[0],Y.shape[1])
29
+ #print("X",X , "Y", Y, "Z", Z)
30
+ #Z.reshape(X.shape[0],Y.shape[1])
31
+ cs=plt.contour(X,Y,Z,np.logspace(0,3.5,7,base=10))
32
+ plt.show()
33
+
34
+
22
35
  def rosenbrock(x):
23
36
  global FUNCCALLS
24
37
  FUNCCALLS += 1
@@ -57,31 +70,12 @@
57
70
  #xopt, fopt, output = uncon(func, x0, 1e-6)
58
71
  cont(func)
59
72
  sys.exit(1)
60
- l=xopt[0,0]
61
- m=xopt[0,1]
62
- xopt=[l,m]
63
- _, gopt = rosenbrock(np.array(xopt))
64
- if (not (np.linalg.norm(gopt, ord = np.inf) <= 1e-6)):
65
- continue
66
- print("---------------result------------------")
67
- print('x_star',xopt)
68
- print('fopt ', fopt, FUNCCALLS)
69
73
  ```
70
74
 
71
75
  ```
72
76
 
73
- def cont(func):
74
-
75
- X,Y=np.meshgrid(np.linspace(-5,5,100),np.linspace(-5,5,100))
76
- t,_=np.array([X,Y])
77
- Z,_=func(t)
78
- Z=np.matrix(Z)
79
- #print("length",X.shape[1],Y.shape[1],Z.shape[0],Y.shape[1])
80
- #print("X",X , "Y", Y, "Z", Z)
81
- #Z.reshape(X.shape[0],Y.shape[1])
82
- cs=plt.contour(X,Y,Z,np.logspace(0,3.5,7,base=10))
83
- plt.show()
84
77
 
78
+
85
79
  ```
86
80
 
87
81
  このまま実行をすると、

2

エラーの追加をしました。

2020/02/14 00:30

投稿

alpha_high
alpha_high

スコア6

title CHANGED
File without changes
body CHANGED
@@ -76,16 +76,20 @@
76
76
  t,_=np.array([X,Y])
77
77
  Z,_=func(t)
78
78
  Z=np.matrix(Z)
79
- print("length",X.shape[1],Y.shape[1],Z.shape[0],Y.shape[1])
79
+ #print("length",X.shape[1],Y.shape[1],Z.shape[0],Y.shape[1])
80
- print("X",X , "Y", Y, "Z", Z)
80
+ #print("X",X , "Y", Y, "Z", Z)
81
- Z.reshape(X.shape[0],Y.shape[1])
81
+ #Z.reshape(X.shape[0],Y.shape[1])
82
82
  cs=plt.contour(X,Y,Z,np.logspace(0,3.5,7,base=10))
83
83
  plt.show()
84
84
 
85
85
  ```
86
86
 
87
-
87
+ このまま実行をすると、
88
+ ```error
89
+ TypeError: Input z must be at least a 2x2 array.
88
- ここで、
90
+ ```
91
+ とエラーが出てしまいます。
92
+ XとYのdimension数を合わせなければいけないと思い、
89
93
  ```python
90
94
  Z.reshape(X.shape[0],X.shape[1])
91
95
  ```

1

コードを追加しました。

2020/02/13 23:25

投稿

alpha_high
alpha_high

スコア6

title CHANGED
File without changes
body CHANGED
@@ -16,8 +16,9 @@
16
16
  _配列数が合いません
17
17
  とエラーが出ます。
18
18
 
19
- ```python
19
+ ```uncon
20
20
 
21
+
21
22
  def rosenbrock(x):
22
23
  global FUNCCALLS
23
24
  FUNCCALLS += 1
@@ -28,27 +29,74 @@
28
29
 
29
30
  return funcValue, gradient
30
31
 
32
+
33
+ def uncon(func, x0, epsilon_g, options=None):
34
+
35
+
36
+ if options is None:
37
+
38
+ n=2
39
+ xopt, fopt, outputs = optimize(func, x0, epsilon_g,n)
40
+
41
+ return xopt, fopt, outputs
42
+
43
+
44
+
45
+ nTrails=10
46
+
47
+ for _, func in enumerate(testFuncs):
48
+
49
+ np.random.seed(0)
50
+
51
+ trialScore = 0
31
- funcs = [rosenbrock]
52
+ for _ in range(nTrails):
53
+ FUNCCALLS = 0
54
+
55
+ x0 = np.random.normal(size=2)*3
56
+
57
+ #xopt, fopt, output = uncon(func, x0, 1e-6)
58
+ cont(func)
59
+ sys.exit(1)
60
+ l=xopt[0,0]
61
+ m=xopt[0,1]
62
+ xopt=[l,m]
63
+ _, gopt = rosenbrock(np.array(xopt))
64
+ if (not (np.linalg.norm(gopt, ord = np.inf) <= 1e-6)):
65
+ continue
66
+ print("---------------result------------------")
67
+ print('x_star',xopt)
68
+ print('fopt ', fopt, FUNCCALLS)
69
+ ```
70
+
71
+ ```
72
+
32
73
  def cont(func):
74
+
33
75
  X,Y=np.meshgrid(np.linspace(-5,5,100),np.linspace(-5,5,100))
34
76
  t,_=np.array([X,Y])
35
77
  Z,_=func(t)
36
78
  Z=np.matrix(Z)
37
- #print("length",X.shape[1],Y.shape[1],Z.shape[0],Y.shape[1])
79
+ print("length",X.shape[1],Y.shape[1],Z.shape[0],Y.shape[1])
38
- #print("X",X , "Y", Y, "Z", Z)
80
+ print("X",X , "Y", Y, "Z", Z)
39
- Z.reshape(X.shape[0]X.shape[1])
81
+ Z.reshape(X.shape[0],Y.shape[1])
40
82
  cs=plt.contour(X,Y,Z,np.logspace(0,3.5,7,base=10))
41
83
  plt.show()
42
84
 
43
- plot(func)
44
85
  ```
45
86
 
87
+
46
88
  ここで、
47
89
  ```python
48
90
  Z.reshape(X.shape[0],X.shape[1])
49
91
  ```
50
92
  のように、配列数を合わせようとしてみたのですが、
93
+
94
+ ```error
95
+ Z.reshape(X.shape[0],Y.shape[1])
96
+ ValueError: cannot reshape array of size 100 into shape (100,100)
97
+ ```
98
+
51
- 100のarray を100x100に出来ませんと出てきてしまい、上下のプログラムで、関数を分けて居るかどうかだけなのに、何故答えが出せないのか、と悩んでいます。
99
+ 上下のプログラムで、関数を分けて居るかどうかだけなのに、何故答えが出せないのか、と悩んでいます。
52
100
  リストや行列への変換も、考えられるペアで変えてみましたが、出来ませんでした。
53
101
 
54
102
  私のコードの間違いを教えていただけないでしょうか。