Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
1 / 1 / 0
Регистрация: 17.11.2019
Сообщений: 12

Почему стандартный list быстрее массива Numpy?

04.12.2019, 18:43. Показов 6214. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Простой тест:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import numpy as np
import time
 
fields = [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
fields2 = np.array([6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6])
 
time1 = time.time()
i = 0
for _ in range(1000001):
    fields[i] += 1
    i += 1
    if i > 11:
       i  = 0
print(f'List: {time.time()- time1}')
print(fields)
 
time1 = time.time()
i = 0
for _ in range(1000001):
    fields2[i] += 1
    i += 1
    if i > 11:
       i  = 0
print(f'Numpy: {time.time()- time1}')
print(fields2)
Стандартный list выигрывает в скорости более, чем 2 раза.
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.12.2019, 18:43
Ответы с готовыми решениями:

Как работает время в программе, почему сортировка массива на 1000 элементов быстрее, чем сортировка массива на 8?
#include <iostream> #include <chrono> #include <cmath> #include "List.h" #include <iomanip> #include <cstdlib> //генератор...

Стандартный метод .Pop() для list
Есть ли стандартный метод для того, чтобы взять и удалить элемент из списка? Я использую свой метод: public static T...

Ошибки при работе с переменными типа list и np.array(NumPy библотека)
Есть переменная train типа лист, которая содержит 2 элемента - массив картинок и массив меток. Я пытался в переменную X записать массив...

26
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
04.12.2019, 19:31
Цитата Сообщение от Wada19 Посмотреть сообщение
Стандартный list выигрывает в скорости более, чем 2 раза
Это было бы смешно, когда бы не было так грустно. Это я о вашем коде.

numpy массивы никогда не используются в цикле. Потому что цикл им не нужен.
В numpy вообще не принято использовать ничего из чистого Python, потому что все что нужно - есть в numpy и называется векторными операциями.
Идите читать документацию.
0
1 / 1 / 0
Регистрация: 17.11.2019
Сообщений: 12
04.12.2019, 20:35  [ТС]
Garry Galler,

У меня задача ускорить работу имеющегося кода, когда в циклах меняется содержимое списка (массива), поэтому я посмотрел в сторону numpy. Как numpy к данной задаче приложить, чтобы ее ускорить?
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
04.12.2019, 20:50
Цитата Сообщение от Wada19 Посмотреть сообщение
У меня задача ускорить работу имеющегося кода
Так решите математически, зачем Вам numpy.

Добавлено через 2 минуты
целочисленное деление на 12 и остаток от деления на 12. вся задача
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
05.12.2019, 07:19
LOL!
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#import time
#import numpy as np
 
fields = [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
 
def f1(fields):
    i = 0
    for _ in range(1000001):
        fields[i] += 1
        i += 1
        if i > 11:
           i = 0
 
def f2(fields):
    l = len(fields)
    i = 0
    while i <= 1_000_000:
        fields[i % l] += 1
        i += 1
    # assert fields == [83340, 83340, 83340, 83340, 83340, 83339, 83339, 83339, 83339, 83339, 83339, 83339]
 
 
def f3(fields):
    n = 1_000_001
    l = len(fields)
    s = n // l
    for i in range(l):
        fields[i] += s
    for i in range(n % l):
        fields[i] += 1
    #assert fields == [83340, 83340, 83340, 83340, 83340, 83339, 83339, 83339, 83339, 83339, 83339, 83339]
 
import timeit
 
print(timeit.timeit('f1(fields.copy())', setup='from __main__ import f1, fields', number=10))
print(timeit.timeit('f2(fields.copy())', setup='from __main__ import f2, fields', number=10))
print(timeit.timeit('f3(fields.copy())', setup='from __main__ import f3, fields', number=10))
Code
1
2
3
3.245891882000251
3.415172856000936
6.618000043090433e-05
0
05.12.2019, 09:26

Не по теме:

Цитата Сообщение от Рыжий Лис Посмотреть сообщение
LOL!
Ага, если головой об стену биться, можно голову сломать:rofl:

0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
05.12.2019, 10:58
Я бы посоветовал какое-нибудь введение в numpy, а не документацию. Документация - всё-таки немного про другое.
Про векторные операции, конечно, в первую очередь.

Добавлено через 1 минуту
Wada19, что за задача-то? Втыкаю-втыкаю в ваш код, не могу понять.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
05.12.2019, 11:12
dondublon, да там что-то вроде такого:

Есть 12 корзин и 1 000 000 мячей. В каждой корзине уже лежит сколько-то мячей. Нужно раскидать этот 1 000 000 мячей по корзинам: в первую, вторую, третью итд. Вывести количество мячей в каждой корзине
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
05.12.2019, 11:18
Рыжий Лис, а с какой целью (т. е. целевой функцией) раскидываем?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
05.12.2019, 11:28
round robin. По очереди по одному мячу.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
05.12.2019, 12:47
Рыжий Лис, ох ты ё. Понятно.
0
1 / 1 / 0
Регистрация: 17.11.2019
Сообщений: 12
08.12.2019, 16:13  [ТС]
dondublon,

Подскажите пожалуйста, как при помощи хваленного numpy увеличить скорость обработки списка (массива), обходя его последовательно несколько раз и меняя значения элементов
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
08.12.2019, 16:16
Никак, если алгоритм плохой.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.12.2019, 16:31
Цитата Сообщение от Wada19 Посмотреть сообщение
ак при помощи хваленного numpy увеличить скорость обработки списка
Придумать алгоритм без цикла.
Не можешь - не используй numpy.

P.S. хваленный numpy заслуженно хвален. Просто есть отдельные экземпляры программистов, которые не понимают как им правильно пользоваться.
Но это проблема этих программистов, а не numpy.
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,307
08.12.2019, 17:25
Рыжий Лис, где то ошибочка у вас
Python
1
2
3
4
5
>>> print(sum([83340, 83340, 83340, 83340, 83340, 83339, 83339, 83339, 83339, 83339, 83339, 83339]))
1000073
>>> 1000073 - sum([6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6])
1000001
>>>
что то где то лишнее
должно быть
[83340, 83340, 83340, 83340, 83339, 83339, 83339, 83339, 83339, 83339, 83339, 83339]
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
08.12.2019, 17:36
Semen-Semenich, не вижу проблемы. Одна единичка лишняя?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
09.12.2019, 11:08
Wada19, присоединяюсь к Garry Galler.
Чудес не бывает, бензопила тоже имеет преимущество перед обычной только при соблюдении некоторых условий

Опишите вашу задачу словами, неохота разбираться в коде.
0
1 / 1 / 0
Регистрация: 17.11.2019
Сообщений: 12
10.12.2019, 16:36  [ТС]
dondublon,

Задача: сделать игру калах на питоне. У каждого игрока по 6 лунок, в каждой лунке - по 6 камней. Ход делается "посевом", то есть из лунки берутся камни и по одному раскладываются против часовой стрелки. Хочется увеличить скорость генератора хода
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
10.12.2019, 18:47
Wada19, немного нестандартная задача, но давайте попробуем.
Куда раскладываются камни? Давайте представим наш массив камней в виде 2д массива. Игроки-лунки. Допустим, если 2 игрока, то массив будет таков:
Code
1
2
3
игроки\лунки          1  2  3  4  5  6
   1                  6  6  6  6  6  6 
   2                  6  6  6  6  6  6
Что должно получиться?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
10.12.2019, 18:49
2д массив - это неинтересно. Интереснее сделать кольцевой буфер из 12 элементов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.12.2019, 18:49
Помогаю со студенческими работами здесь

List<T>.Contains() и Dictionary<T, T>.ContainsKey(): что быстрее
Какой из вариантов быстрее, когда требуется определить, есть ли объект в списке? И будет ли предпочтение меняться в зависимости от...

Почему квадрат числа в numpy получается отрицательным?
при попытке посчитать Nl=np.cross(C,A);mNl=((np.square(Nl))+(np.square(Nl))+(np.square(Nl))); print Nl,mNl #НОРМАЛЬ ...

Почему List list= new ArrayList();
Слышал что правильно писать так: List list= new ArrayList(); Но почему не правильно писать List list=new List(); или ArrayList...

Почему не импортируется пакет numpy 1.6.2, скачанный с MacPorts, в python 2.7.3? Mac OS X 10.7.4 (Lion)
Ставлю на Mac OS X 10.7.4 (Lion) пакеты python27 @2.7.3, py27-numpy @1.6.2, py27-scipy @0.10.1, py27-matplotlib @1.1.1, py27-spyder @2.1.9,...

Что работает быстрее и почему?
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; #include &lt;time.h&gt; #include &lt;malloc.h&gt; #define N 4096 void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных выбран регистр накопления, в. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru