a, b, dは定数 cはリスト hoge1, hoge2はint型の変数です 0079デフォルトの名無しさん2018/07/08(日) 00:26:05.04ID:Jzinsuog 繰り返しhoge1、hoge2、result2に計算結果を書き込んでいるだけなのであれば、最後のただ1度だけ計算すればよいのでは? 質問は正確にー 0080デフォルトの名無しさん2018/07/08(日) 03:29:49.37ID:/D8rnv+z iがfor内部で使われてないように見えるから多分何かしら誤植があるんだろうけど これだったら内包表記で書けるだろ 0081デフォルトの名無しさん2018/07/08(日) 10:39:13.40ID:vD9CznKQ 根本的に高速化するなら行列形式で書くしかないけどな 0082デフォルトの名無しさん2018/07/08(日) 11:45:12.12ID:MJ8iSrG7 あほか 0083デフォルトの名無しさん2018/07/08(日) 12:36:39.11ID:XRwcXxE1 >>> num = [-3, -2, -1, 0, 1, 2, 3] >>> result=[i+1 for i in num] >>> d = 3 >>> c = [i+10 for i in num] >>> b = 2 >>> a = 1 >>> >>> def hogehoge(a, b, c): return a+b, b+c
>>> def hogex(a, b, c): return a+b+c
>>> >>> l = [] >>> for temp in range(len(num)): if num[temp] > 0: for i in range(result[temp]): hoge1, hoge2 = hogehoge(a, b, c[temp]) result2 = hogex(d, hoge1, hoge2) l.append(result2)
>>> l [19, 19, 20, 20, 20, 21, 21, 21, 21] >>> >>> >>> [hogex(d, *hogehoge(a, b, c[temp])) for temp in [temp for temp in range(len(num)) if num[temp]>0] for i in range(result[temp])] [19, 19, 20, 20, 20, 21, 21, 21, 21] >>> 0084782018/07/08(日) 13:38:26.20ID:1Fr6jxFu すみません間違えていました 正確に言うと、hogehogeでなんらかの座標を算出して、hogexでopencvで図形をimgに描画 これをhpgehpgeの入力を順番に変えて数回ほど繰り返したいです
for i in range(max) if temp[i].size: for j in range(temp[i]): hoge1, hoge2 = hogehoge(a, b, result[i][j]) img = cv2.hogex(d, hoge1, hoge2)
リストに出力しない場合は内包表記使えないですかね? イマイチ内包表記の事分かってないです 0085デフォルトの名無しさん2018/07/08(日) 14:09:53.71ID:ai00mC6I それ支配的なのはhogexやhogehogeだよね? ボトルネックを見つけないと高速化の意味ないよ 0086デフォルトの名無しさん2018/07/08(日) 14:14:30.75ID:XRwcXxE1 hpgehpgeはどこにあるの? あと5chだと半角スペースが消えるから全角スペースでインデント表現しないと リストに出力しようがしまいが内包表記は使えるよ 0087デフォルトの名無しさん2018/07/08(日) 14:29:35.70ID:XRwcXxE1 >>> [print('hoge') for i in range(3)] hoge hoge hoge [None, None, None] >>> リストに出力しなかったらNoneが入るだけ
[cv2.hogex(d, *hogehoge(a, b, reault[i][j])) for i in [i for i in range(max) if temp[i].size] for j in range(temp[i])] これでいけるんじゃないかな? 0088782018/07/08(日) 22:59:07.98ID:vTpYTVTg ありがとございます アドバイスを参考に試行錯誤してたのですがちょっと自分には難しかったです