как решить проблему трансляции для умножения между несоответствующим массивом и списком - PullRequest
1 голос
/ 28 марта 2020

Я пытаюсь умножить список скаляров на массив, но получаю ошибку трансляции.

Что представляет собой способ Pythoni c для решения этой проблемы и получения трех разных массивов, каждый из которых масштабируется на каждое из чисел lst?

import numpy as np
ar = np.array([2, 3, 1, 0,5,6,9,20,10,15,1,54,20,10,40,50,60, 49,2,40]).reshape(10,2)
scale = 2
lst = [4,5,6]
lst *  ar

Out: ValueError: operands could not be broadcast together with shapes (3,) (10,2)

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Я бы go что-то вроде следующего:

ar[None, :, :] * np.array(lst)[:,None,None]
array([[[  8,  12],
        [  4,   0],
        [ 20,  24],
        [ 36,  80],
        [ 40,  60],
        [  4, 216],
        [ 80,  40],
        [160, 200],
        [240, 196],
        [  8, 160]],

       [[ 10,  15],
        [  5,   0],
        [ 25,  30],
        [ 45, 100],
        [ 50,  75],
        [  5, 270],
        [100,  50],
        [200, 250],
        [300, 245],
        [ 10, 200]],

       [[ 12,  18],
        [  6,   0],
        [ 30,  36],
        [ 54, 120],
        [ 60,  90],
        [  6, 324],
        [120,  60],
        [240, 300],
        [360, 294],
        [ 12, 240]]])
0 голосов
/ 28 марта 2020

IIU C: Попробуйте это:

arrs = [ar * scalar for scalar in lst]

print(arrs[0])
print(arrs[1])
print(arrs[2])

ВЫХОД:

array([[  8,  12],
       [  4,   0],
       [ 20,  24],
       [ 36,  80],
       [ 40,  60],
       [  4, 216],
       [ 80,  40],
       [160, 200],
       [240, 196],
       [  8, 160]])
array([[ 10,  15],
       [  5,   0],
       [ 25,  30],
       [ 45, 100],
       [ 50,  75],
       [  5, 270],
       [100,  50],
       [200, 250],
       [300, 245],
       [ 10, 200]])
array([[ 12,  18],
       [  6,   0],
       [ 30,  36],
       [ 54, 120],
       [ 60,  90],
       [  6, 324],
       [120,  60],
       [240, 300],
       [360, 294],
       [ 12, 240]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...