当前位置: 首页 > 知识库问答 >
问题:

有没有办法nth_element数据的副本?

温峻熙
2023-03-14

我希望从C中的浮点数组中计算中值:

float Median( FloatArray const * constFloatArray )
{
    FloatArray    scratch = FloatArray( *constFloatArray );
    int64_t const size    = scratch.GetWidth() * scratch.GetHeight();
    int64_t const mid     = size / 2;

    std::nth_element( scratch.begin(), scratch.begin() + mid, scratch.end() );

    return scratch[ mid ];
}

FloatArray包含一个常规的C浮点数组。

我正在使用std::nth_element,但想知道是否有像nth_element这样的工具可以处理const数据?现在,我正在制作一个副本,然后在扔掉副本之前执行nth_element。如果const数据没有像nth_element这样的东西,是否有更有效的方法使用复制步骤来计算信息,从而避免潜在的额外O(n)循环?也许性能影响可以忽略不计?我的数组大小可能在20亿量级。

共有1个答案

潘修为
2023-03-14

我不确定这样是否会更有效率,但是使用< code > STD::partial _ sort _ copy 可以节省一半的复制时间。我们可以使用< code > STD::partial _ sort _ copy 将一半的数据复制到一个新的数组中,它会在这样做的同时将其排序到该数组中。然后你需要做的就是得到奇数个元素的最后一个元素,或者偶数个元素的最后两个元素的平均值。使用一个看起来像

int main() 
{
    std::vector<int> v{5, 6, 4, 3, 2, 6, 7, 9, 3, 10};
    std::vector<int> r(v.size() / 2 + 1);
    std::partial_sort_copy(v.begin(), v.end(), r.begin(), r.end());
    if (r.size() % 2)
        std::cout << r.back();
    else
        std::cout << (r[r.size() - 1] + r[r.size() - 2]) / 2.0;
}
 类似资料:
  • 我有一个数据框,比如说一些投资数据。我需要根据某些条件(比如说,U类型)从这个数据帧中提取数据。有许多可用的基金类型,我只需要提取与特定基金类型匹配的数据。 funding_type有风险、种子、天使、股权等价值。我只需要数据匹配资金类型比如种子和天使 我试着跟着 这里MF1是我的数据帧。这将提供与种子基金类型相关的所有数据 我需要的条件有点像 MF1[MF1['funding_round_typ

  • 问题在标题中,这里很新,所以还不太了解这个网站。想使用哈希来创建“更多的随机性”,但还不确定Java的数学。Random()还没有,有可能破解它吗?

  • 我想在应用GROUPBY条件后取消对数据帧的分组。我一组一组地用熊猫 现在我想将数据解组。列名是由下划线连接的列的组合。例如:Amt\u 8\u red\u 17:列名是(Amount、Count、Color、Id)输出的样子 有没有更快的办法?

  • 我们想为房间数据库构建一个过滤器,过滤器选项由用户选择。 i、 e.我们有一个带有字段(id、名称、日期、类型)的实体。用户可以按日期和/或名称过滤列表,其中包含文本和/或类型等于某个值 有办法在房间里做吗?

  • 我试图找出是否有一种方法可以使用lombok手动设置getter方法名。考虑以下示例: 通过上面的示例,您可以像这样构建上下文: 然后将其用作 生成的方法的名称并不是我所想的那样,我想知道是否有办法对其进行自定义?是否有注释允许我将其命名为shouldLogReceivedMessages()而不是isLogReceivedMessages?我在文件里找不到这个。

  • 在web上,我只找到了一种停止迭代方法的方法。通过使用limit()函数。但这会迭代一个具体的循环数。我想用它来停止一个谓词。 有没有办法用Streams做到这一点? 更新1:使用Java 8