Как умножить отдельные элементы массива строк ih с элементом другого массива строк ih? - PullRequest
0 голосов
/ 26 июня 2019

Как умножить отдельные элементы массива nthy строки ih на другой элемент массива строки ih?

Пример инвентаризации: я хочу умножить массив numpy (содержащий элемент (280 из них) стоимостью в долларах США, евро) на размер [280,2] на массив numpy размера [280,3] (акции в 3-х складских домах (представляющих колонну).

Я полагаю, что у меня нет проблем с использованием циклов for для вычисления, но я пытаюсь изучить методы трансляции и изменения формы. Поэтому я хотел бы, чтобы ваша помощь указала мне правильное направление (или методы)

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

  Array A            
  [[1.50 1.80]        
  [3    8   ]]        

  Array B
  [[5  10 20]
  [10 20 30]]

Результат, который мне нужен -

  [[7.5 9  11.5 18  30 36]
  30  80 60   160 90  240]]

Спасибо

1 Ответ

1 голос
/ 26 июня 2019

Описание было немного нечетким, как и пример:

In [264]: A=np.array([[1.5,1.8],[3,8]]); B=np.array([[5,10,20],[10,20,30]])                          
In [265]: A.shape                                                                                    
Out[265]: (2, 2)
In [266]: B.shape                                                                                    
Out[266]: (2, 3)

Похоже, вы пытаетесь создать версию внешнего продукта, которую можно сделать с помощью радиовещания.

Давайте попробуем одну комбинацию:

In [267]: A[:,:,None]*B[:,None,:]                                                                    
Out[267]: 
array([[[  7.5,  15. ,  30. ],
        [  9. ,  18. ,  36. ]],

       [[ 30. ,  60. ,  90. ],
        [ 80. , 160. , 240. ]]])

Есть правильные числа, но не правильный порядок. Давайте попробуем еще раз:

In [268]: A[:,None,:]*B[:,:,None]                                                                    
Out[268]: 
array([[[  7.5,   9. ],
        [ 15. ,  18. ],
        [ 30. ,  36. ]],

       [[ 30. ,  80. ],
        [ 60. , 160. ],
        [ 90. , 240. ]]])

Это лучше - теперь просто измените форму:

In [269]: _.reshape(2,6)                                                                             
Out[269]: 
array([[  7.5,   9. ,  15. ,  18. ,  30. ,  36. ],
       [ 30. ,  80. ,  60. , 160. ,  90. , 240. ]])

_268 - это частичное транспонирование _267, .transpose(0,2,1).

...