Умножить массивы в массиве с двумя числами - PullRequest
2 голосов
/ 23 мая 2019

Я хочу объединить этот массив массивов с 1080 и 1920.

[[0.4375, 0.3477366255144033], [0.3599537037037037, 0.676954732510288], [0.5648148148148148, 0.720164609053498], [0.8483796296296297, 0.44238683127572015], [0.8726851851851852, 0.3374485596707819]]

То есть 0.4375 * 1080 и 0.3477 * 1920

Я хочу сделать это для каждого элемента.

Как я могу сделать это с Python или NumPy?

Ответы [ 4 ]

5 голосов
/ 23 мая 2019

Просто конвертируйте ваши данные в массивы, а затем просто берите продукт *.Хитрость здесь в том, чтобы создать 1-й вектор из двух ваших значений, на который вы хотите умножить.* затем выполняет поэлементное умножение

import numpy as np

mult = np.array([1080, 1920])
inp = np.array([[0.4375, 0.3477366255144033], [0.3599537037037037, 0.676954732510288], 
                [0.5648148148148148, 0.720164609053498], [0.8483796296296297, 0.44238683127572015], 
                [0.8726851851851852, 0.3374485596707819]])

result = inp*mult
# array([[ 472.5       ,  667.65432099],
#        [ 388.75      , 1299.75308642],
#        [ 610.        , 1382.71604938],
#        [ 916.25      ,  849.38271605],
#        [ 942.5       ,  647.90123457]])

EDIT :: Сравнение времени Оба метода работают аналогично

%timeit inp*mult
# 2.89 µs ± 365 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit np.multiply(inp, mult)
# 2.55 µs ± 322 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
2 голосов
/ 23 мая 2019

Просто для того, чтобы предоставить решение, отличное от numpy, как вариант, так как вы сказали Python или numpy, вы можете легко сделать это и с помощью простого цикла for.

# myList is your list
for index in range(len(myList)):
    myList[index][0] *= 1080
    myList[index][1] *= 1920
print(myList)
2 голосов
/ 23 мая 2019

Вы хотите выполнить поэлементное умножение массивов.Так что используйте метод numpy.multiply().

>>> x1 = np.array([[0.4375, 0.3477366255144033], [0.3599537037037037, 0.676954732510288], [0.5648148148148148, 0.720164609053498], [0.8483796296296297, 0.44238683127572015], [0.8726851851851852, 0.3374485596707819]])
>>>
>>> x1
array([[0.4375    , 0.34773663],
       [0.3599537 , 0.67695473],
       [0.56481481, 0.72016461],
       [0.84837963, 0.44238683],
       [0.87268519, 0.33744856]])
>>> x2 = np.array([1080, 1920])
>>> x2
array([1080, 1920])
>>> prod = np.multiply(x1, x2)
>>> prod
array([[ 472.5       ,  667.65432099],
       [ 388.75      , 1299.75308642],
       [ 610.        , 1382.71604938],
       [ 916.25      ,  849.38271605],
       [ 942.5       ,  647.90123457]])

РЕДАКТИРОВАТЬ: Как ответил @Sheldore выше, использование оператора * тоже хорошо, и выполняет ту же работу.

1 голос
/ 23 мая 2019

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

result = [ [a*1080,b*1920] for a,b in arrays ]

Для обработки любого количества множителей вы можете использовать zip

multipliers = [1080,1920]
result = [ [a*m for a,m in zip(row,multipliers)] for row in arrays ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...