def doubletrial(f,n,length,trials): timelist = stdarray.create1D(length) timecount = stdarray.create1D(length) for i in range(length): timelist[i] = trialtime(f,n*(2**i),trials) print(n*(2**i),timelist[i],int(timelist[i]/timelist[0])) timecount[i] = int(timelist[i]/timelist[0]) return timelist
def merge(hi, mid, lo, List): x = 0 i = lo j = mid n = hi - lo aux = stdarray.create1D(n, 0) for k in range(n): if i == mid: aux[k] = List[j] j += 1 #i == mid,意味着[lo,mid)的数字已经排完了,接下来就是依次将 j - hi的元素排进 aux;下面的操作都不会在进行。 elif j == hi: aux[k] = List[i] i += 1 # j == hi,意味着[mid,hi)的数字已经排完了,接下来就是依次将 i-mid的元素排进aux elif List[j] < List[i]: aux[k] = List[j] j += 1 #发现后半部分的元素小于前面,则排后半部分元素到当下位置。 else: aux[k] = List[i] i += 1 List[lo:hi] = aux[0:n]
def trialtime(f,n,trials): ''' 1. generate random list with length n 2. start time 3. sort f with list(n) 4. end time :param f: :param n: :return: time ''' List = stdarray.create1D(n,0) total = 0 for i in range(len(List)): List[i] = random.randint(0,1000) for t in range(trials): watch =stopwatch() f(List) total +=watch.elapsedTime() averagetime = total/trials return averagetime
def main(): n = int(sys.argv[1]) for i in range(n): time1 = Watchstop() L = stdarray.create1D(i) print(time1.elapsedtime())
def increaseTime(self, dt): # print('increasetime') n = len(self._bodies) f = stdarray.create1D(n, Vector([0, 0])) for i in range(n): for j in range(n): if i != j: bodyi = self._bodies[i] bodyj = self._bodies[j] f[i] = f[i] + bodyi.forceFrom(bodyj) r_list = [] for i in range(n): # print('r_list is:',r_list) self._bodies[i].move(f[i], dt, r_list) r_list.append(self._bodies[i].get_r())
def __init__(self, n): self._balls = stdarray.create1D(n) self._min = -50 self._max = 50 stddraw.setYscale(self._min, self._max) stddraw.setXscale(self._min, self._max) for i in range(n): mass = random.randint(1, 10) radius = random.uniform(1, 2) velocity = Vector([random.randint(0, 3), random.randint(0, 3)]) location = Vector([random.randint(0, 10), random.randint(5, 10)]) print('generate location:', location) ball = Ball(mass, radius, velocity, location) self._balls[i] = ball
def dice(dice_1, dice_2, n): index = [] for i in range(6): for j in range(6): if dice_1[i] + dice_2[j] not in index: index.append(dice_1[i] + dice_2[j]) else: pass result = stdarray.create1D(len(index), 0) for i in range(n): sum = dice_1[stdrandom.uniformInt(0, 5)] + dice_2[stdrandom.uniformInt( 0, 5)] result[sum] += 1 return result
def __init__(self, filename): instream = InStream(filename) n = instream.readInt() radius = instream.readFloat() stddraw.setXscale(-radius, +radius) stddraw.setYscale(-radius, +radius) self._bodies = stdarray.create1D(n) for i in range(n): rx = instream.readFloat() ry = instream.readFloat() vx = instream.readFloat() vy = instream.readFloat() mass = instream.readFloat() r = Vector([rx, ry]) v = Vector([vx, vy]) self._bodies[i] = Body(r, v, mass)
def audio_note(self): stddraw.setXscale(0, 50) stddraw.setYscale(-10, 10) print('enter audio_note') duration = self.f hz = notes[self.n - 1] n = int(SPS * duration) samples = stdarray.create1D(n + 1, 0.0) for i in range(n + 1): samples[i] = math.sin(2.0 * math.pi * i * hz / SPS) print(samples) for i in range(0, n - 100, 100): stddraw.line(i / 500, samples[i], (i + 100) / 500, samples[i + 100]) stddraw.show() stdaudio.playSample(samples) print('play') stdaudio.wait()
def transferstr(self, choice): if choice == 'h': k = len(self.string) string = self.string if choice == 'u': k = len(str(self.int)) string = str(self.int) list_new = stdarray.create1D(k, 0) for i in range(len(string)): list_new[i] = str(self._transfer(choice, string[i])) tmp = '' print(list_new, type(list_new)) for item in list_new: print('item is:', item) tmp += item print('tmp is:', tmp) return tmp
#计算输出转换矩阵,矩阵上第i行第j列的数字,代表从i页跳转到 j页的概率 from stdpackage import stdarray, stdio n = stdio.readInt() linkCounts = stdarray.create2D(n, n, 0) outDegress = stdarray.create1D(n, 0) while not stdio.isEmpty(): i = stdio.readInt() j = stdio.readInt() outDegress[i] += 1 linkCounts[i][j] += 1 stdio.writeln(str(n) + ' ' + str(n)) for i in range(n): for j in range(n): p = (0.8 * linkCounts[i][j] / outDegress[i]) + (0.2 / n) stdio.writef('%8.5f', p) stdio.writeln()
def tone(hz,duration,sps=44100): n = int(sps*duration) a = stdarray.create1D(n+1,0.0) for i in range(n+1): a[i] = math.sin(2.0*math.pi*i*hz/sps) return a
1:命令行输入指定月份,日期,测试次数 2: 函数1生成随机月份,日期 3: 函数2对比新的随机月份,日期,并返回结果 4: 如果结果为True,则返回人数 5: 2 - 4 循环目标次数,函数3 计算出概率分布 6: 函数4 画出概率分布密度图 ''' import random from stdpackage import stdarray,stddraw import sys possibility = stdarray.create1D(364,0) def gen_birthday(): print('enter gen_birthday') month_date = {1:[1,31], 2:[1,28], 3:[1,31], 4:[1,30], 5:[1,31], 6:[1,30], 7:[1,31], 8:[1,31], 9:[1,30], 10:[1,31], 11:[1,30], 12:[1,31]} month = random.randint(1,12)
sys.path.insert(0,'/Users/Jane/Library/Python/3.5/lib/python/site-packages/') sys.path.insert(0,'/Users/Jane/Desktop/PythonLearning') from miaozaiye.randomqueue import RandomQueue from miaozaiye.nodequene import link from stdpackage import stdstats,stddraw,stdarray M = 5 N = 500 T = 3 servicegroup = RandomQueue() for i in range(M): servicegroup.enqueue(list()) Length = stdarray.create1D(M,0) for i in range(N): best = servicegroup.sample() print("object {0}".format(i)) for randomtry in range(T-1): queue = servicegroup.sample() print('find random queue:',queue) if len(best) > len(queue): best = queue best.append(i) a = 0 for list in servicegroup.queue(): Length[a]=len(list) a+=1 stddraw.clear()
3. 随机生成概率 sp,根据sp跳转到下一个页面,对于被跳转到的页面计数 4。重复3,直到总次数耗尽 5。输出每个页面被跳转到的比例(次数/n) ''' from stdpackage import stdio, stdarray, stddraw import random import sys moves = int(sys.argv[1]) n = stdio.readInt() stdio.readInt() P = stdarray.create2D(n, n, 0.0) P_accumulated = stdarray.create2D(n, n, 0.0) SP = stdarray.create1D(n, 0.0) for i in range(n): for j in range(n): P[i][j] = stdio.readFloat() for i in range(n): for j in range(n): for h in range(j + 1): P_accumulated[i][j] += P[i][h] def find_page(i, p): j = 0 while j < n: if p < P_accumulated[i][j]: return j
def __init__(self, n): self._freq = stdarray.create1D(n, 0)
def superpose(a,b,aWeight,bWeight): c = stdarray.create1D(len(a),0.0) for i in range(len(a)): c[i] = aWeight*a[i]+bWeight*b[i] return c
from stdpackage import stdaudio from stdpackage import stdarray import math import sys SPS = 44100 hz = 440.0 duration = 10.0 n = int(SPS*duration) a = stdarray.create1D(n+1) for i in range(n+1): a[i]=math.sin(2.0*math.pi*i*hz/SPS) stdaudio.playSample(a) stdaudio.wait()
def __sub__(self, other): result = stdarray.create1D(self._n, 0) for i in range(self._n): result[i] = self._coords[i] - other._coords[i] return Vector(result)
def scale(self, alpha): result = stdarray.create1D(self._n, 0) for i in range(self._n): result[i] = alpha * self._coords[i] return Vector(result)
import math from stdpackage import stdarray from stdpackage import stdaudio from stdpackage import stdio from stdpackage import stddraw SPS = 44100 CONCERT_A = 440.0 stddraw.setXscale(0,50) stddraw.setYscale(-20,20) height = 1 while not stdio.isEmpty(): pitch = stdio.readInt() duration = stdio.readFloat() hz = CONCERT_A*(2**(pitch/12.0)) n = int(SPS*duration) samples = stdarray.create1D(n+1,0.0) for i in range(n+1): samples[i] = math.sin(2.0*math.pi*i*hz/SPS) stdaudio.playSamples(samples) for i in range(0,n-100,100): stddraw.line(i/500,samples[i]+20-height,(i+100)/500,samples[i+100]+20-height) stddraw.show(duration*1000) height +=2 stdaudio.wait()
def draw_clock(H=0, M=0, S=0): stddraw.setXscale(-1.5, 1.5) stddraw.setYscale(-1.5, 1.5) R = 1.1 Hour_L = 0.4 Min_L = 0.55 Sec_L = 0.7 Hour_count = 0 Hour_X = stdarray.create1D(12, 0) Hour_Y = stdarray.create1D(12, 0) for i in range(1, 13): Hour_X[i - 1] = 1 * math.cos(-(i / 12 * 2 * math.pi - 1 / 2 * math.pi)) Hour_Y[i - 1] = 1 * math.sin(-(i / 12 * 2 * math.pi - 1 / 2 * math.pi)) stddraw.setFontSize(25) if H > 11: print('H is {0}'.format(H)) H = H % 12 Hour_count = 1 while True: while H < 13: angle_H = H * 2 * math.pi / 12 - 1 / 2 * math.pi print('H is {0}'.format(H)) if H == 12: H = 0 Hour_count += 1 H += 1 if Hour_count % 2 == 0: text = 'morining' else: text = 'afternoon' while M < 61: angle_M = M * 2 * math.pi / 60 - 1 / 2 * math.pi print('m is {0}'.format(M)) if M == 60: print('m is 60') M = 0 break else: M += 1 while S < 61: angle_s = S * 2 * math.pi / 60 - 1 / 2 * math.pi print('s is {0}'.format(S)) if S == 60: S = 0 print('s is 60') break else: S += 1 stddraw.clear() stddraw.circle(0, 0, R) for i in range(1, 13): stddraw.text(Hour_X[i - 1], Hour_Y[i - 1], str(i)) stddraw.text(0, 0.85, text) stddraw.setPenRadius(0.02) stddraw.line(0, 0, Hour_L * math.cos(-angle_H), Hour_L * math.sin(-angle_H)) stddraw.setPenRadius(0.01) stddraw.line(0, 0, Min_L * math.cos(-angle_M), Min_L * math.sin(-angle_M)) stddraw.setPenRadius(0.005) stddraw.line(0, 0, Sec_L * math.cos(-angle_s), Sec_L * math.sin(-angle_s)) stddraw.show(1000)
命令行模式: python3 tansition.py<tiny.txt|python3 markov.py 20 ''' from stdpackage import stdio,stdarray import sys moves = int(sys.argv[1]) n = stdio.readInt() stdio.readInt() p = stdarray.create2D(n,n,0.0) for i in range(n): for j in range(n): p[i][j] = stdio.readFloat() ranks = stdarray.create1D(n,0.0) ranks[0] = 1.0 for i in range(moves): new_ranks = stdarray.create1D(n,0.0) for k in range(n): for j in range(n): new_ranks[j] += ranks[k]*p[k][j] ranks = new_ranks for i in range(n): stdio.writef('%8.5f',ranks[i]) stdio.writeln()
from stdpackage import stdarray, stddraw, stdrandom, stdstats import math from miaozaiye import gaussian # n = int(sys.argv[1]) # trials = int(sys.argv[2]) n = 20 trials = 10000 p = 0.1 stddraw.setCanvasSize(1000, 400) for n in range(20, 1000): stddraw.clear() freq = stdarray.create1D(n + 1, 0) for t in range(trials): heads = stdrandom.binomial(n, 0.7) freq[heads] += 1 norm = stdarray.create1D(n + 1, 0) for i in range(n + 1): norm[i] = 1.0 * freq[i] / trials phi = stdarray.create1D(n + 1, 0.0) stddev = math.sqrt(n) / 2.0 for i in range(n + 1): phi[i] = gaussian.pdf(i, n / 2.0, stddev)