0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonでランダムに生成した整数を足し合わせて特定の数にするときの備忘録

Last updated at Posted at 2022-07-11

概要

  • あるテストをするのにレコード数1000のCSVを作りたい
  • ただし、ランダムに生成した整数を(1000レコード分)足し合わせたときに特定の数(今回は32767)にしなければならない

実装1

import random

def gen_int():

    comb = []
    for i in range(1,1001):
        next_max_value = 32766-sum(comb)
        if next_max_value == 0:
            comb.append(0)
        else:
            comb.append(random.randint(0,next_max_value))

こういう風に書けば、1000レコード分足し合わせたときに32767になるのだが、、、中身を確認してみると途中から全部になっていてデータとして使い物にならなそう。

csv
27560
3412
1513
100
169
6
3
2
0
0
0
1
0
0
0




0

実装2

import random
import numpy as np

def gen_int():

    value = []
    np.random.seed(32)
    value.append(np.random.uniform(0,65,998))

    int_list = []
    for i in value[0]:
        if sum(int_list) >= 32766:
            break
        else:
            int_list.append(int(i))
    
    int_list.append(352)

しょうがないので書き直したが、uniformの引数のチューニングに無駄に時間がかかってしまった上に、最後に足りない数(今回は352)をappendするという格好悪いやり方になってしまった。が、一応中身は期待するように出来上がった。

csv




29
32
16
47
36
50
34
0
8
60
25
6
5
37
352

まとめ

気の利いたやり方を考える時間が無いので今回はこんな感じで終わり。一応やりたいことはできたのだが格好悪い出来上がりになってしまったので、他に良いやり方があれば是非教えて下さい・・・。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?