gpt4 book ai didi

C++ - 使频率加起来为 1 的漂亮方法

转载 作者:行者123 更新时间:2023-11-30 05:13:21 25 4
gpt4 key购买 nike

编辑:感谢您的快速回答!
确实理解数字是如何表示的,以及为什么可以观察到这样的结果。我的问题实际上是关于一种使它们加起来等于 1.0 的方法。


我有一个由 4 个字母 A、C、G 和 T 组成的字母表。
我对它们进行了计数,因此得到了总字母数和每个字母数。

unsigned int A_count; //initialized
unsigned int C_count; //initialized
unsigned int G_count; //initialized
unsigned int T_count; //initialized
//a bit hacky, enables floating point division
double total_count = A_count + C_count + G_count + T_count;

然后,我尝试计算它们的频率:

double A_frequency = A_count / total_count;
double C_frequency = C_count / total_count;
double G_frequency = G_count / total_count;
double T_frequency = T_count / total_count;

但这并不总是对我有用,因为频率之和可能大于 1,我需要它正好等于 1.0。


例子:

std::cout << "Result : " << A_frequency + C_frequency + G_frequency + T_frequency << std::endl;
Result : 1.000[...]01

<罢工>我需要它来生成一个 meme 文件,如此处记录 ( MEME file format )。
可以在 relevant part 中阅读那:

<罢工>

As each row contains the probability of each letter in the alphabet the probabilities in the row must sum to 1.

正如@TonyK 在评论中指出的那样,MEME 文件本身并不需要总和正好为 1.0,无论文档怎么说。

但在我的例子中,模因文件只是作为另一个程序的输入而创建的,该程序需要频率之和恰好为 1.0。


有什么好/漂亮的方法吗?如果没有,为什么?

(这是我在stackoverflow上的第一篇文章,如果有什么不对的地方,请告诉我,我会改正,谢谢)

最佳答案

您可以使用存储分子(= 单个字母的计数)和分子(= 总计数)的分数类型。通过这种方式,您可以确定在将频率相加后您将得到 1(= 总计数/总计数)。

实际上,我会考虑是否真的值得一开始就计算频率。您也可以只存储计数,并且仅在需要时将它们除以计数总数。

关于C++ - 使频率加起来为 1 的漂亮方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43980459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com