質問編集履歴

1

a

2018/12/01 14:22

投稿

Fallout_18
Fallout_18

スコア124

test CHANGED
@@ -1 +1 @@
1
- def関数を用いたランダムウォークを書いていて、、、
1
+ def関数を用いたkak
test CHANGED
@@ -1,17 +1,3 @@
1
- 将来的に並列計算をしたくて、以前質問した境界条件を含んだランダムウォークをdef関数に分けて、書き直しています。問題点を一緒に書いてあるコードを掲載します。
2
-
3
- ```python
4
-
5
- stage=[[[1 1 1],[1 0 1],[1 1 1]]
6
-
7
- [[1 0 1],[0 0 0],[1 0 1]]
8
-
9
- [[1 1 1],[1 0 1],[1 1 1]]]
10
-
11
- ```
12
-
13
- ```python
14
-
15
1
  import numpy as np
16
2
 
17
3
  import itertools
@@ -22,131 +8,7 @@
22
8
 
23
9
  all_site = [i for i in itertools.product( [i for i in range(0,n)], [i for i in range(0,n)], [i for i in range(0,n)] )]
24
10
 
25
- #ランダムウォークさせる関数
26
11
 
27
- def rondom_walk(n,all_site,number,next_walk,walk):
28
-
29
- for r in all_site:
30
-
31
- x = r[0]
32
-
33
- y = r[1]
34
-
35
- z = r[2]
36
-
37
- #周期境界条件
38
-
39
- x1 = (x-1 + n) % n
40
-
41
- x2 = (x+1) % n
42
-
43
- y1 = (y-1 + n) % n
44
-
45
- y2 = (y+1) % n
46
-
47
- z1 = (z-1 + n) % n
48
-
49
- z2 = (z+1) % n
50
-
51
- if stage[r]== 0:
52
-
53
- continue
54
-
55
- else:
56
-
57
- if walk[r]==0:
58
-
59
- continue
60
-
61
- else:
62
-
63
- if number == 1:
64
-
65
- if stage[x2,y,z]==1:
66
-
67
- next_walk[x2,y,z]=walk[r]
68
-
69
- else:
70
-
71
- next_walk[x,y,z]=walk[r]
72
-
73
- elif number == 2:
74
-
75
- if stage[x,y2,z]==1:
76
-
77
- next_walk[x,y2,z]=walk[r]
78
-
79
- else:
80
-
81
- next_walk[x,y,z]=walk[r]
82
-
83
- elif number == 3:
84
-
85
- if stage[x,y,z2]==1:
86
-
87
- next_walk[x,y,z2]=walk[r]
88
-
89
- else:
90
-
91
- next_walk[x,y,z]=walk[r]
92
-
93
- elif number == 4:
94
-
95
- if stage[x1,y,z]==1:
96
-
97
- next_walk[x1,y,z]=walk[r]
98
-
99
- else:
100
-
101
- next_walk[x,y,z]=walk[r]
102
-
103
- elif number == 5:
104
-
105
- if stage[x,y1,z]==1:
106
-
107
- next_walk[x,y1,z]=walk[r]
108
-
109
- else:
110
-
111
- next_walk[x,y,z]=walk[r]
112
-
113
- elif number == 6:
114
-
115
- if stage[x,y,z1]==1:
116
-
117
- next_walk[x,y,z1]=walk[r]
118
-
119
- else:
120
-
121
- next_walk[x,y,z]=walk[r]
122
-
123
- walk = np.copy(next_walk)
124
-
125
- return walk
126
-
127
-
128
-
129
- #ある時間に原点に戻ってくるためのカウント関数
130
-
131
- def count1(time,walk):
132
-
133
- if time==0 and walk[0,0,0]==1:
134
-
135
- return 1
136
-
137
- else:
138
-
139
- return 0
140
-
141
- def count2(time,walk):
142
-
143
- if time==6 and walk[0,0,0]==1:
144
-
145
- return 1
146
-
147
- else:
148
-
149
- return 0
150
12
 
151
13
  #試行回数
152
14