Как получить мощность элемента в двух массивах в python? - PullRequest
0 голосов
/ 15 октября 2018

У меня есть два массива с 3 элементами в каждом.

reduction_combs = [2, 3, 7]
elements = [3,6,8]

Есть ли путь для вычисления нового массива:

c = [2**3 , 3**6, 7**8]

Ответы [ 10 ]

0 голосов
/ 15 октября 2018

Использование enumerate и pow

c = [pow(v, elements[i]) for i, v in enumerate(reduction_combs)]
0 голосов
/ 15 октября 2018

Использование массивов NumPy:

import numpy as np

a = np.array([2, 3, 7])
b = np.array([3, 6, 8])

a ** b
# output: array([8, 729,5764801])
0 голосов
/ 15 октября 2018

Одним из быстрых решений будет:

c = [a**b for a,b in zip(reduction_combs, elements)]

Вы также можете попробовать использовать numpy, как показано ниже:

import numpy as np
c = np.power(reduction_combs, elements)
0 голосов
/ 15 октября 2018

Вы можете сделать это, используя numpy:

import numpy
reduction_combs = numpy.array([2, 3, 7])
elements = numpy.array([3, 6, 8])
c = reduction_combs ** elements

или если вы хотите сделать это с простым python, вы можете рассмотреть вопрос о понимании списка:

c = [reduction_combs[i] ** elements[i] for i in range(len(reduction_combs))]

Вы должны узнать немного больше о том, что списки делают в python, и если вы часто работаете с массивами, привыкните работать с numpy!

0 голосов
/ 15 октября 2018

Если вам нравится функциональный стиль как альтернатива превосходному пониманию списка , предложенному tda, вот решение с operator.pow и itertools.starmap.

>>> from operator import pow
>>> from itertools import starmap
>>> list(starmap(pow, zip(reduction_combs, elements))) 
[8, 729, 5764801]

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

>>> import numpy as np
>>> r = np.array(reduction_combs)
>>> e = np.array(elements)
>>> 
>>> r**e
array([      8,     729, 5764801])
0 голосов
/ 15 октября 2018

Вы также можете использовать карту с лямбда-выражениями, проходящими через два списка:

c = list(map(lambda x,y: x**y, reduction_combs, elements))

Где x и y будут значениями из элементовведения и элементов соответственно.

0 голосов
/ 15 октября 2018

В дополнение к методу zip это еще один способ использования enumerate и понимания списка.Здесь j - это элемент reduction_combs, а i - соответствующий индекс, по которому вы получаете мощность, которая будет повышена с elements

c = [j**elements[i] for i, j in enumerate(reduction_combs)]
.
0 голосов
/ 15 октября 2018

Это может быть достигнуто с помощью простого понимания списка.

[x ** y for (x, y) in zip(elements, reduction_combs)]
0 голосов
/ 15 октября 2018

Вы можете использовать функцию numpy power :

import numpy as np

reduction_combs = [2, 3, 7]
elements = [3, 6, 8]

print(np.power(reduction_combs, elements))

Выход

[      8     729 5764801]

Если вы хотите вывод в виде спискапросто сделайте:

np.power(reduction_combs, elements).tolist()
0 голосов
/ 15 октября 2018

Да, вы можете просто сделать [x**y for (x,y) in zip(reduction_combs, elements)]

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