2개의 리스트를 요소별로 곱하는 방법은 무엇입니까?
Matlab에서 할 수 있는 것처럼 Python에서 두 목록을 함께 곱하는 요소별 곱셈을 수행하고자 합니다.
Matlab에서는 이렇게 했어요.
a = [1,2,3,4]
b = [2,3,4,5]
a .* b = [2, 6, 12, 20]
목록 이해는 모든 조합에 대해 16개의 목록 엔트리를 제공합니다.x * y
의x
부터a
그리고.y
부터b
. 매핑 방법을 잘 모르겠습니다.
왜 그런지 궁금하신 분은 데이터셋을 가지고 있는데, 그 데이터셋에 대해 곱해 보고 싶습니다.Numpy.linspace(1.0, 0.5, num=len(dataset)) =)
.
목록 이해와 함께 사용zip()
:.
[a*b for a,b in zip(lista,listb)]
이미 사용 중이니까numpy
, 데이터를 저장해 두는 것이 적절합니다.numpy
배열이 필요합니다.이렇게 하면 요소별 제품 등을 무료로 얻을 수 있습니다.
In [1]: import numpy as np
In [2]: a = np.array([1,2,3,4])
In [3]: b = np.array([2,3,4,5])
In [4]: a * b
Out[4]: array([ 2, 6, 12, 20])
np.multiply(a, b)를 사용합니다.
import numpy as np
a = [1,2,3,4]
b = [2,3,4,5]
np.multiply(a,b)
루프 내의 각 요소를 곱해 볼 수 있습니다.그렇게 하는 단점은
ab = [a[i]*b[i] for i in range(len(a))]
또 다른 답은 다음과 같습니다.
-1
...가져와야
+1
...가독성이매우높다.
import operator
a = [1,2,3,4]
b = [10,11,12,13]
list(map(operator.mul, a, b))
출력 [10, 22, 36, 52]
편집
Python3.6+의 경우 맵은 자동으로 값을 언팩하지 않습니다.
사용
import itertools
import operator
itertools.starmap(operator.mul, zip(a, b)))
곱셈은 다음을 사용하여 할 수 있습니다.lambda
foo=[1,2,3,4]
bar=[1,2,5,55]
l=map(lambda x,y:x*y,foo,bar)
매우 직관적인 방법:
a = [1,2,3,4]
b = [2,3,4,5]
ab = [] #Create empty list
for i in range(0, len(a)):
ab.append(a[i]*b[i]) #Adds each element to the list
가후아의 답은 표제에서 표현된 바와 같이 맞지만, 목록이 이미 숫자 형식이거나 10보다 크면 NPE가 제안하는 간단한 숫자 곱셈을 하는 것이 훨씬 빠를 뿐만 아니라 가독성도 높아집니다.타이밍은 다음과 같습니다.
0.0049ms -> N = 4, a = [i for i in range(N)], c = [a*b for a,b in zip(a, b)]
0.0075ms -> N = 4, a = [i for i in range(N)], c = a * b
0.0167ms -> N = 4, a = np.arange(N), c = [a*b for a,b in zip(a, b)]
0.0013ms -> N = 4, a = np.arange(N), c = a * b
0.0171ms -> N = 40, a = [i for i in range(N)], c = [a*b for a,b in zip(a, b)]
0.0095ms -> N = 40, a = [i for i in range(N)], c = a * b
0.1077ms -> N = 40, a = np.arange(N), c = [a*b for a,b in zip(a, b)]
0.0013ms -> N = 40, a = np.arange(N), c = a * b
0.1485ms -> N = 400, a = [i for i in range(N)], c = [a*b for a,b in zip(a, b)]
0.0397ms -> N = 400, a = [i for i in range(N)], c = a * b
1.0348ms -> N = 400, a = np.arange(N), c = [a*b for a,b in zip(a, b)]
0.0020ms -> N = 400, a = np.arange(N), c = a * b
즉, 다음과 같은 테스트 프로그램으로부터.
import timeit
init = ['''
import numpy as np
N = {}
a = {}
b = np.linspace(0.0, 0.5, len(a))
'''.format(i, j) for i in [4, 40, 400]
for j in ['[i for i in range(N)]', 'np.arange(N)']]
func = ['''c = [a*b for a,b in zip(a, b)]''',
'''c = a * b''']
for i in init:
for f in func:
lines = i.split('\n')
print('{:6.4f}ms -> {}, {}, {}'.format(
timeit.timeit(f, setup=i, number=1000), lines[2], lines[3], f))
대규모 리스트의 경우는, 다음의 방법으로 반복할 수 있습니다.
product_iter_object = itertools.imap(operator.mul, [1,2,3,4], [2,3,4,5])
product_iter_object.next()
에 출력 목록의 각 요소를 나타냅니다.
출력은 2개의 입력 리스트 중 짧은 쪽의 길이입니다.
1의 배열을 작성하다; 각 목록에 배열을 곱하다; 배열을 목록으로 변환하다
import numpy as np
a = [1,2,3,4]
b = [2,3,4,5]
c = (np.ones(len(a))*a*b).tolist()
[2.0, 6.0, 12.0, 20.0]
열거를 사용할 수 있습니다.
a = [1, 2, 3, 4]
b = [2, 3, 4, 5]
ab = [val * b[i] for i, val in enumerate(a)]
그map
여기서 함수는 매우 유용할 수 있습니다.사용.map
우리는 반복 가능한 각 요소에 어떤 기능도 적용할 수 있다.
파이썬 3.x
>>> def my_mul(x,y):
... return x*y
...
>>> a = [1,2,3,4]
>>> b = [2,3,4,5]
>>>
>>> list(map(my_mul,a,b))
[2, 6, 12, 20]
>>>
물론입니다.
map(f, iterable)
와 동등하다
[f(x) for x in iterable]
이 때문에, 이하의 방법으로 솔루션을 입수할 수 있습니다.
>>> [my_mul(x,y) for x, y in zip(a,b)]
[2, 6, 12, 20]
>>>
Python 2.x의 경우map()
수단: 반복 가능한 각 요소에 함수를 적용하고 새 목록을 작성합니다.3. Python 3.x의 map
목록 대신 생성자를 사용합니다.
my_mul
수 있다mul
파이썬 2.7
>>>from operator import mul # import mul operator
>>>a = [1,2,3,4]
>>>b = [2,3,4,5]
>>>map(mul,a,b)
[2, 6, 12, 20]
>>>
Python 3.5+
>>> from operator import mul
>>> a = [1,2,3,4]
>>> b = [2,3,4,5]
>>> [*map(mul,a,b)]
[2, 6, 12, 20]
>>>
하세요.map()
하는 합니다.*
이데올로기 때문에을 푸는 은 포장을 푸는 것보다 더 .list
★★★★★★★★★★★★★★★★★★:
>>> list(map(mul,a,b))
[2, 6, 12, 20]
>>>
목록 유형을 유지하고 한 줄로 수행하려면(물론 numpy를 np로 가져온 후):
list(np.array([1,2,3,4]) * np.array([2,3,4,5]))
또는
list(np.array(a) * np.array(b))
같은 길이의 리스트에 사용할 수 있습니다.
def lstsum(a, b):
c=0
pos = 0
for element in a:
c+= element*b[pos]
pos+=1
return c
import ast,sys
input_str = sys.stdin.read()
input_list = ast.literal_eval(input_str)
list_1 = input_list[0]
list_2 = input_list[1]
import numpy as np
array_1 = np.array(list_1)
array_2 = np.array(list_2)
array_3 = array_1*array_2
print(list(array_3))
언급URL : https://stackoverflow.com/questions/10271484/how-to-perform-element-wise-multiplication-of-two-lists
'programing' 카테고리의 다른 글
문서 폴더의 파일 목록을 가져오는 중 (0) | 2023.04.10 |
---|---|
heroku 코드를 배포할 때 사용 권한이 거부되었습니다(공개 키).치명적: 리모트엔드가 예기치 않게 절단되었습니다. (0) | 2023.04.10 |
Panda DataFrame은 다음 문자열로 목록을 저장했습니다.목록으로 다시 변환하는 방법 (0) | 2023.04.10 |
Swift에서 두 날짜(월/일/시간/분/초)의 차이 파악 (0) | 2023.04.10 |
IEnumberable vs List - 사용방법그들은 어떻게 일하는가? (0) | 2023.04.10 |