#python #numpy
Вопрос:
Если у нас есть 2D массив. Предположим, я хотел бы поместить в квадрат первый элемент строки и сохранить его, а затем взять куб второго элемента и снова сохранить его в исходном массиве. Один из способов-выполнить итерацию по массиву:
#arr shape is (2,2)
arr = np.array([[1, 2], [4, 5]], np.int32)
squarred = np.zeros((arr.shape[0], 2))
squarred [:,0] = arr[:,0]*arr[:,0]
squarred [:,1] = arr[:,1] * arr[:,1] * arr[:,1]
Вопрос: Можем ли мы сделать то же самое, используя итерацию цикла, пожалуйста? Это образец для 2D-массива. Что делать, если у нас есть произвольный массив любого размера, и мы хотели бы изменить каждый элемент в каждой строке на пользовательское значение, каков был бы ваш наиболее эффективный подход, пожалуйста?
Редактировать:
- 2D массив размером (2,2) и такой же для вывода. Но выходной элемент имеет первый элемент каждой строки в квадрате, а второй в кубе. В общем, каков был бы наиболее эффективный способ сделать это, учитывая, что у нас есть еще большие массивы, пожалуйста?
- Не могли бы вы, пожалуйста, опубликовать свой ответ для поэлементного изменения каждого значения в каждой строке на произвольное значение, пожалуйста?
Комментарии:
1. Пожалуйста, добавьте ввод и ожидаемый результат
2.
arr ** [2,3]
. Но это без петли.3. @MichaelSzczesny. Спасибо. Какой был бы наиболее эффективный способ, основанный на том, что вы знаете, пожалуйста? Что делать, если у нас более 2 элементов в строке, где мы хотим внести пользовательские изменения в каждый элемент, каков был бы ваш подход, пожалуйста?
4. @Avra — Вещание должно быть самым быстрым методом, независимо от размера вашего массива. Итерация в цикле должна быть самой медленной на сегодняшний день. Если у вас есть другой вопрос, пожалуйста, задайте его в другом вопросе о stackoverflow.
5. @Avra — Извините, я не могу опубликовать ответ на вопрос, отличный от вашего примера. И вы специально просите о решении цикла. Я не буду публиковать ответ с циклом на этот вопрос.
Ответ №1:
Используйте numpy.power
функцию:
# 1xN could also be [3, 5], [2, 8], or any array of size N
exponents_per_row = np.arange(2, 4)
exponents = np.tile(exponents_per_row, (2, 1))
res = np.power(arr, exponents)
print(res)
Выход
[[ 1 8]
[ 16 125]]
Комментарии:
1. Спасибо. Для произвольного изменения каждого элемента в строке на пользовательскую мощность, пожалуйста, измените код соответствующим образом.
2. @Avra Я не понимаю вопроса, просто измените массив показателей так, как вы считаете нужным
3. Я имею в виду, что если у нас есть
N
элементы в каждой строкеNxM
массива, поэтому мы хотели бы изменить размер каждого элемента в строке1xN
на произвольное значение и одинаковый для всех остальных строк, каков был бы ваш подход здесь, пожалуйста?4. @Avra обновил ответ!
5. Спасибо! Таким образом, показатели будут применены к каждой строке, что делать, если изменения, внесенные в каждую строку, будут отличаться от показателей других строк, пожалуйста? Я имею в виду, что каждая строка будет иметь свои собственные показатели. Должны ли мы в этом случае использовать петлю, пожалуйста? Если да, то делается ли это так
for x in Arr: exponents_per_row = np.arange(2, 4) exponents = np.tile(exponents_per_row, (2, 1)) res = np.power(arr, exponents) print(res)