回答編集履歴

3

演算式変更

2019/09/22 07:20

投稿

nomuken
nomuken

スコア1627

test CHANGED
@@ -38,7 +38,9 @@
38
38
 
39
39
 
40
40
 
41
- np.repeatとnp.tileを使ってy_cとzの要素数を掛け合わせます。そのうえで配列の各要素で演算を行わせるvectorizeを使って関数を定義し演算します。
41
+ np.repeatとnp.tileを使ってy_cとzの要素数を掛け合わせます。~~そのうえで配列の各要素で演算を行わせるvectorizeを使って関数を定義し演算します。~~
42
+
43
+ 単純な演算であればそのまま式を記述してください(vectorize不要)
42
44
 
43
45
 
44
46
 
@@ -84,11 +86,11 @@
84
86
 
85
87
 
86
88
 
87
- f = np.vectorize(func)
89
+ #f = np.vectorize(func)
88
90
 
91
+ #A = f(2000, y_c_array, z_array)
89
92
 
90
-
91
- A = f(2000, y_c_array, z_array)
93
+ A = (-2*2000*(y_c_array**2)*z_array)/(math.pi*(((y_c_array**2)+(z_array**2)))**2)
92
94
 
93
95
 
94
96
 
@@ -98,4 +100,4 @@
98
100
 
99
101
  ※結果があっているかは確認してません。
100
102
 
101
- ※y_cとzがともに0の場合、0割が発生するため、対策しています。
103
+ ~~※y_cとzがともに0の場合、0割が発生するため、対策しています。~~

2

vectorize対応

2019/09/22 07:20

投稿

nomuken
nomuken

スコア1627

test CHANGED
@@ -25,3 +25,77 @@
25
25
  9
26
26
 
27
27
  ```
28
+
29
+
30
+
31
+ ---
32
+
33
+ > 簡略化のために,A=y_c*zとしていましたが,σy_heimen = (-2*Pn*(y_c**2)*z)/(π*(((y_c**2)+(z**2)))**2)を要素数y_c,zの2乗で計算するために,np.outer,np.revalはつかえますか?
34
+
35
+
36
+
37
+ 単純な掛け算ではなくを任意の演算を行う場合はやり方が変わってきます。np.outer,np.revalは使えません。
38
+
39
+
40
+
41
+ np.repeatとnp.tileを使ってy_cとzの要素数を掛け合わせます。そのうえで配列の各要素で演算を行わせるvectorizeを使って関数を定義し演算します。
42
+
43
+
44
+
45
+ ```Python
46
+
47
+ import numpy as np
48
+
49
+ import math
50
+
51
+
52
+
53
+ def func(Pn, y_c, z):
54
+
55
+ try:
56
+
57
+ return (-2*Pn*(y_c**2)*z)/(math.pi*(((y_c**2)+(z**2)))**2)
58
+
59
+ except ZeroDivisionError:
60
+
61
+ return float('inf')
62
+
63
+
64
+
65
+ z_depth = 5
66
+
67
+ c = 0.5
68
+
69
+ z = np.arange(0,(z_depth+0.1)*10)/10
70
+
71
+ y_c = np.arange((-z_depth*5),(z_depth+0.1)*5)/10
72
+
73
+
74
+
75
+ z_array = np.repeat(z, len(y_c))
76
+
77
+ y_c_array = np.tile(y_c, len(z))
78
+
79
+
80
+
81
+ print(len(z_array))
82
+
83
+ print(len(y_c_array))
84
+
85
+
86
+
87
+ f = np.vectorize(func)
88
+
89
+
90
+
91
+ A = f(2000, y_c_array, z_array)
92
+
93
+
94
+
95
+ print(len(A))
96
+
97
+ ```
98
+
99
+ ※結果があっているかは確認してません。
100
+
101
+ ※y_cとzがともに0の場合、0割が発生するため、対策しています。

1

一次元化方法を追加

2019/09/22 07:03

投稿

nomuken
nomuken

スコア1627

test CHANGED
@@ -12,4 +12,16 @@
12
12
 
13
13
  [ 6, 9, 12]])
14
14
 
15
+ >>> len(np.outer([1,2,3],[2,3,4]))
16
+
17
+ 3
18
+
19
+ >>> np.ravel(np.outer([1,2,3],[2,3,4]))
20
+
21
+ array([ 2, 3, 4, 4, 6, 8, 6, 9, 12])
22
+
23
+ >>> len(np.ravel(np.outer([1,2,3],[2,3,4])))
24
+
25
+ 9
26
+
15
27
  ```