Как применить функцию ко всем элементам массива - PullRequest
0 голосов
/ 22 мая 2018

У меня есть 1-мерный массив целых чисел.

Когда мой скрипт Python начинает выполняться, массив-пустышка состоит из всех нулей.

Я хочу применить следующую функцию к каждому элементу вмассив:

a [i] = i * 2.0

В этой функции i является индексом массива, а [i] является элементом с этим индексом.

Как я могу сделать это в векторизованном виде (как можно быстрее, без написания явного цикла в Python)?

Я знаю, как сделать умножение.Проблема в том, что я не знаю, как получить индекс массива в векторизованном виде.

Редактировать:

Я получаю указатель на буфер массива из C DLL.Затем я использую np.ctypeslib.as_array для создания массива массива из указателя буфера памяти, возвращенного из DLL C.

Мне нужно обновить содержимое указателя буфера памяти, возвращенного DLL C, и я подумалчто я могу сделать это очень быстро, используя numpy.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Используйте arange, чтобы построить массив желаемых значений, и нарезать значения в массив, который вы хотите заполнить:

a[:] = numpy.arange(0, len(a)*2, 2)
0 голосов
/ 22 мая 2018

Где my_array - ваш массив нулей:

map(lambda x, i: x + i*2.0, my_array, np.arange(0,len(my_array))

Обратите внимание, что функция map () ведет себя по-разному в зависимости от того, находитесь ли вы в Python2 или Python3.В Python2 вам возвращается список.В Python3 вам возвращается итерация (которая, если я правильно помню, имеет ленивый eval).Вы можете легко преобразовать эту итерацию в список, используя функцию list ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...