Комбинаторы неподвижной точки в C++

Если вы не хотите изменять df, я бы предложил избавиться от apply и векторизовать это. Одним из вариантов является использование eval.

u = df.assign(Latitude=df['Latitude'].str[:-1].astype(float))
u['Longitude'] = df['Longitude'].str[:-1].astype(float)

df[u.eval("24 < Latitude < 30 and 79 < Longitude < 87")]

У вас есть больше вариантов, используя Series.between:

u = df['Latitude'].str[:-1].astype(float))
v = df['Longitude'].str[:-1].astype(float))

df[u.between(24, 30, inclusive=False) & v.between(79, 87, inclusive=False)]
10
задан Micha Wiedenmann 30 May 2017 в 09:33
поделиться

2 ответа

Вот тот же код, преобразованный в boost::bind заметьте y-combinator и его сайт приложения в основной функции. Я надеюсь, что это помогает.

#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <iostream>

// Y-combinator compatible factorial
int fact(boost::function<int(int)> f,int v)
{
  if(v == 0)
    return 1;
  else
    return v * f(v -1);
}

// Y-combinator for the int type
boost::function<int(int)>
    y(boost::function<int(boost::function<int(int)>,int)> f)
{
  return boost::bind(f,boost::bind(&y,f),_1);
}


int main(int argc,char** argv)
{
  boost::function<int(int)> factorial = y(fact);
  std::cout << factorial(5) << std::endl;
  return 0;
}
32
ответ дан 3 December 2019 в 13:41
поделиться

Можно ли объяснить как это все работы?

fix2 является y-combinator (а именно, это - combinator для функций с двумя аргументами; первым аргументом является функция (в целях рекурсии), вторым аргументом является "надлежащий" аргумент функции). Это создает рекурсивные функции.

bll:: мочите (...), кажется, создает некоторую форму функционального объекта, тело которого

if(second arg == 0)
{
    return 1;
}
else
{
    return second arg * first arg(second arg - 1);
}

"Ленивое" должно, по-видимому, там остановить бесконечное расширение первого (функционального) аргумента (чтение на различии между ленивым и строгим y combinators для наблюдения почему).

Код довольно ужасен. Анонимные функции хороши иметь, но хакерство для работы вокруг отсутствия C++ синтаксической поддержки делает их не стоящими усилия.

3
ответ дан 3 December 2019 в 13:41
поделиться
Другие вопросы по тегам:

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