Эффективное вычисление суммы кросс-произведения для двух 3D-массивов в R

Это декартово произведение, и я просто задал тот же вопрос не так давно . Вот алгоритм , который размещен на веб-сайте PHP .

function array_cartesian_product($arrays)
{
    $result = array();
    $arrays = array_values($arrays);
    $sizeIn = sizeof($arrays);
    $size = $sizeIn > 0 ? 1 : 0;
    foreach ($arrays as $array)
        $size = $size * sizeof($array);
    for ($i = 0; $i < $size; $i ++)
    {
        $result[$i] = array();
        for ($j = 0; $j < $sizeIn; $j ++)
            array_push($result[$i], current($arrays[$j]));
        for ($j = ($sizeIn -1); $j >= 0; $j --)
        {
            if (next($arrays[$j]))
                break;
            elseif (isset ($arrays[$j]))
                reset($arrays[$j]);
        }
    }
    return $result;
}

4
задан user7283235 20 March 2019 в 04:37
поделиться

1 ответ

Если вы переписываете свою задачу математически, вы можете показать, что она эквивалентна:

dim(x) <- c(3 * N, 3)
dim(y) <- c(3 * N, 3)
gg2 <- crossprod(x, y)

, которая должна быть очень быстрой и не должна делать никаких копий.

0
ответ дан F. Privé 20 March 2019 в 04:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: