0

たくさんのコレクションから15枚の画像を選びたいです。画像の数は、そのコレクションの画像の割合によって異なります。

私のコードは次のとおりです。

image_counts = [16, 2, 14]
total_images = 0
for i in image_counts:
    total_images += i
proportions = [1.0 * i / total_images for i in image_counts]
counts = [int( round( 15 * i)) for i in proportions]

ただし、[8, 1, 7]丸めにより、出力は 16 になります。合計するとちょうど 15 になるリストを取得するにはどうすればよいですか?

4

3 に答える 3

1

あなたのオプションの1つはこれです:

image_counts = [16, 2, 14]
total_images = sum(image_counts)

proportions = [1.0 * i / total_images for i in image_counts]
counts = [int(15 * i) for i in proportions]
if sum(counts) < 15:
    counts[counts.index(min(counts))] += 1

この回答を完了するには:

counts[counts.index(min(counts))] += 15 - sum(counts[1:]) # from user1654936

最終的なリストを 15 要素に切り捨てます。

于 2012-09-08T08:35:52.200 に答える
1

ほとんどの場合、計算された比率に従ってカウントを正確に選択することはできません。したがって、とにかく比率から逸脱する必要があるため、たとえばcountsリストの最初の数を変更して、必要な合計数になるようにすることができます。

image_counts = [16, 2, 14]
total_images = sum(image_counts)
proportions = [1.0 * i / total_images for i in image_counts]
counts = [int( round( 15 * i)) for i in proportions]
counts[0] = 15 - sum(counts[1:])
于 2012-09-08T08:37:22.823 に答える
0

一般に、各コレクション内の画像の数と必要な数によって非常に特定の条件が満たされない限り、合計を 15 (または任意) にして正しい比率にすることはできません。

したがって、これらの数値を調整して、必要なものに近づける方法を決定する必要があります。プロポーションをほぼ正確にしたいですか (そして、既に丸めているため、今でも「ほぼ」しかありません)。それとも合計で 15 以外の数を許可しますか?

また:

total_images = sum(image_counts)
于 2012-09-08T08:35:53.230 に答える