вечный чайник
  • Оптимізація коду Python

    def minibatch_distances(points, chunk_size):
        for i in xrange(0, len(points), chunk_size):
            chunk1 = points[i:i + chunk_size, :]
            d = dist.pdist(chunk1)
            k = 0
            for m in xrange(len(chunk1) - 1):
                for n in xrange(m + 1, len(chunk1)):
                    yield (d[k], m + i, n + i)
                    k += 1
            for j in xrange(i + chunk_size, len(points), chunk_size):
                chunk2 = points[j:j + chunk_size, :]
                for (m, d) in enumerate(dist.cdist(chunk1, chunk2)):
                    for n in xrange(len(chunk2)):
                        yield (d[n], m + i, n + j)
    

    якось так..

  • Оптимізація коду Python

    а, сейчас напишу :) там все просто должно быть, главное, с индексами не ошибиться — ну да вы и потестируете, если что :)

  • Оптимізація коду Python

    ну, points я мерял просто за компанию. понятно, что distances ~ O(points^2). кстати, странно, что у вас sys.getsizeof() дает 80 — попробуйте тогда points.nbytes, это точно должно работать.

    в общем, если памяти все равно не хватает, то minibatch вам в помощь. разбиваем points на несколько сегментов, и для каждого считаем pdist() между точками внутри сегмента, и cdist() между точками этого сегмента и остальных. будет, конечно, не так быстро, как один pdist(), но наверняка намного быстрее обработки каждой пары отдельно.

  • Stanford free stuff

    +1 за class-central.com

    а у стенфорда есть еще online.stanford.edu/courses/allcourses

  • Оптимізація коду Python

    как вариант, кстати, если все данные не получается за раз засунуть в один вызов pdist(), можно соорудить minibatch из pdist() и cdist().

  • Оптимізація коду Python

    ну, по крайней мере, для входных данных можно объем памяти уменьшить:

    arr_size = (10000, 20)
    
    points = np.zeros(arr_size, dtype=np.float16)
    points[:] = np.random.standard_normal(arr_size)
    
    print sys.getsizeof(points)
    

    400112

    points = np.random.standard_normal(arr_size) # dtype=float64
    
    print sys.getsizeof(points)
    

    1600112

    впрочем, 1.6M против 400K — не думаю, что это может вызвать какие-либо проблемы.

    А pdist(), похоже, всегда возвращает float64:

    distances = dist.pdist(points)
    
    print sys.getsizeof(points)
    

    399960096

    результат можно сжать во float16, используя тот же прием:

    n = len(points)
    distances = np.zeros(int(n * (n - 1) / 2), dtype=np.float16)
    distances[:] = dist.pdist(points)
    
    print sys.getsizeof(points)
    

    99990096

    объем памяти, кстати, не такие уж большой — ~400M максимум. может, у вас там какие-то лишние временные объекты память отъедают?

  • Оптимізація коду Python

    Сорри я сейчас без компа, но попробуй сделать dtype=float16 для входных данных, и/или оставлять только n наименьших расстояний — и то, и другое есть в моём первом примере

  • Оптимізація коду Python

    о, нашел. все, что вам нужно — scipy.spatial.distance.pdist():

    import numpy as np
    import scipy.spatial.distance as dist
    
    points = np.random.randn(10000, 20)
    distances = dist.pdist(points, metric='euclidean')
    

    считает все расстояния за 1.3 сек на моем лаптопе. batteries included, что называется :)

  • Оптимізація коду Python

    дык где numpy, там и pandas.. а у вас в векторе есть еще какие-то фичи? если нет, то используйте numpy и не парьтесь

  • Оптимізація коду Python

    +1 за numpy и по скорости, и по памяти. можно еще использовать numpy.float16 или какой-нибудь int для экономии памяти.

    а, кстати, точно нужно вычислять все попарные расстояния, или достаточно, скажем, найти 10 ближайших точек? тогда можно сделать что-то вроде

    import numpy as np
    import heapq
    
    arr_size = (10000, 1000)
    
    points = np.zeros(arr_size, dtype=np.float16)
    points[:] = np.random.standard_normal(arr_size)
    
    def closest_n(n, points):
        return heapq.nsmallest(n, (
            (np.linalg.norm(points[i] - points[j]), i, j)
            for i in xrange(len(points))
            for j in xrange(i + 1, len(points))))
    

    подойдет такое?

    Підтримав: minodvesP Vasya
  • Потрібна база даних скілів

    ну и  | Sort-Object -Unique  в конце можно добавить

    Підтримав: anonymous
  • Потрібна база даних скілів

    PowerShell:

    (((65..90) | %{ Invoke-WebRequest ("httрs://www.linkedin.сom/ta/skill?query=" + [char]$_) }).Content | ConvertFrom-Json).resultList.displayName

    A++
    Account Management
    Analysis
    Business Analysis
    Advertising
    Financial Analysis
    Accounting
    AutoCAD
    Data Analysis
    Online Advertising
    . . .
    

    (только поправьте URL — я там русские буквы вставил, чтобы он в ссылку не преобразовывался)

    Підтримав: anonymous
  • Сохранение версии на Github

    добавлю от себя $0.02:

    0) git remote add cart ... добавляет не ветку, а ссылку на удаленный репозиторий на гитхабе, который на вашей машине отныне будет проходить под именем cart. т.е. у вас теперь есть ветка cart и ссылка на удаленный репозиторий, который тоже называется cart

    1) команда git push имеет формат: git push [repo] [branch]

    по умолчанию, repo == «origin», а branch зависит от настроек. в старых версиях, если ветка явно не указывалась, гит пушал *все* локальные ветки, которым находилось соответствие на удаленном репозитории. из-за этого не очень опытные (а иногда и опытные) пользователи преиодически наступали на грабли и пушали на удаленный сервер ветки, которые совсем не надо было пушать.

    такое поведение гита называется push policy == matching. с версии 2.0 политика поменялась, и теперь по умолчанию предлагается пушать только текущую ветку (push policy == simple).

    2) для верности гит предлагает вам самостоятельно выбрать пуш полиси по умолчанию. как тут уже посоветовали умные люди, просто один раз скажите

    git config -global push.default simple

    чтобы ненароком не пушнуть лишнего, да и вообще выработайте привычку всегда указывать и репозиторий, и ветку явно. в вашем случае это будет git push cart cart (не очень, кстати, удобное название для репозитория)

    3) пользоваться командной строкой — это хорошо и правильно. иначе фиг бы кто тут помог разобраться, какую там кнопочку в гуи вы не так нажали

    Підтримав: anonymous
  • Git. сохранение измененных файлов

    сорри, не понял, что речь идет про деплоймент. тогда, если дерево исходников совпадает с тем, что на сервере, то rsync. иначе — можно попробовать git diff --names-only и rsync/scp.

    Підтримав: Oleksandr Suvorov
  • Git. сохранение измененных файлов

    как насчет git format-patch / git apply / git am ?

  • Вы бы наняли топовых комментаторов ДОУ к себе на работу?

    размер захромал в конце. «но все ж иногда есть свободная касса» — так лучше, имно.
    crowdsource poetry FTW! :)

  • Endless search of work

    Hello from curl

  • Endless search of work

    проверка

  • Топик идей для поиска единомышленников

    ну или для начала хотя бы писать от своего реального имени

  • Яка СУБД для гео-даних?

    у меня есть небольшой положительный опыт с PostgreSQL + PostGIS. имно, если основные данные и так хранятся в постгресе, то это вполне приемлемый вариант. правда, в нашем случае мы поняли, что данных у нас не так много, и можно тупо держать в памяти trie + geohash. у нас, правда, координаты не менялись. впрочем, если координаты меняются незначительно (например, мы отслеживаем движущийся объект), то префикс geohash тоже будет меняться не так сильно, а следовательно, апдейтить (и, соответственно, лочить) нужно будет только часть trie. в общем, поэкспериментируйте с geohash, и поделитесь впечатлениями потом.

    Підтримали: anonymous, Юрій Чугаєнко
← Сtrl 1... 678910...21 Ctrl →