Pull to refresh
-3
0
Send message

К сожалению, матрица 10^5 на 10^5 чисел с плавающей запятой будет занимать около 80 ГБ, так что просто перемножить матрицы нельзя.

Прошу прощения, прошляпил. В three_closest переменная first будет всегда иметь значение item, исправляется добавлением distances[item] = 0 перед первым argmax.

"Программист на Фортране на любом языке может писать на Фортране".


У меня максимально "влобным" и неэффективным подходом без JITa ушло 20 сек на 10^4 элементов (то есть где-то в 60 раз быстрее, чем у автора). Цикл for в distance_func тривиально параллелизируется, то есть если есть CPU на ~30 потоков (или какой там Тредриппер можно купить за цену одной Вольты), то никаких "двух суток" и близко не нужно.


Заголовок спойлера
items = np.random.randint(1, 1000, size=(10**4, 64))

# normalize
items_norm = items / np.sqrt(np.sum(items**2, axis=1, keepdims=True))

def three_closest(X, item) -> (int, int, int):
    distances = np.sum(X[item, :] * X, axis=1)

    first = np.argmax(distances)
    distances[first] = 0
    second = np.argmax(distances)
    distances[second] = 0
    third = np.argmax(distances)
    distances[third] = 0

    return first, second, third

def distance_func(X):
    all_items = {}

    for i in range(len(X)):        
        all_items[i] = three_closest(X, i)

    return all_items

distance_func(items_norm)

Нет, Поппер не "назаборщик". Его работы очевидным образом улучшили методы поиска теорий с большей предсказательной силой.


Фейерабенд хотя бы оглядывается на историю науки и пишет логично

А что, если я считаю не так?

Буквально это и имеет, наверно. Можете воспринимать критерий Поппера как одно из составляющих определения понятия "наука".

Фактически с точки зрения критерия Поппера "научная" = "полезная". Если теория даёт предсказания, её можно [потенциально] опровергнуть. Если нельзя опровергнуть — о каких предсказаниях вообще идёт речь? При этом теория вполне может быть опровергнутой и научной, как, например, Ньютоновская механика.


Можно, конечно, рассматривать класс ретроспективных непредсказывающих теорий (типа психоанализа), и тогда критерий Поппера просто говорит "давайте не называть их научными". Мне сложно представить полезную теорию из этого класса, но это, разумеется, ничего не значит.

То, что Фейерабенд писал, что критерий нужно отвергнуть, совершенно не означает, что критерий действительно стоит отвергнуть.


На заборе, как говорится, тоже много чего написано — и, откровенно говоря, я не вижу, почему писанину Фейерабенда мне стоит воспринимать серьёзнее.

Второй питон уже даже официально не поддерживается. В третьем же всё нормально: TypeError, так как строки и числа не сравниваемые.

Пол SSD — придирки? Я уж молчу о том, что люди всё ещё HDD используют, и там уже не явно не доли секунд запуск. Да даже если 1000 мсек против 200 — это всё равно заметно, особенно для приложений, которые постоянно запускаются/закрываются (как тот же калькулятор или редактор).

Глупый вопрос, возможно, но я правильно понимаю, что подобные абстракции имеют смысл только в статически типизированных языках? Мой питонисткий мозг отказывается понимать, в чём вообще проблема написать map(func, iterable). Или питоновский map по сути и есть универсальный функтор?

Как молодая часть этого научного сообщества, я пытаюсь использовать и продвигать Python3. Но есть одна проблема: все расчёты обычно выполняются для кучи очень дорогих данных (как пример — коллайдерные коллаборации). И тут очень важно верифицировать инструменты, ведь один баг может привести к неправильным результатам для данных стоимостью в пару десятков-сотен миллионов доларов. Поэтому все по максимуму держатся за старые и проверенные временем инструменты.
12 ...
13

Information

Rating
Does not participate
Registered
Activity