【问题标题】:how to tackle broadcasting issue for multiplication between missmatched array and list如何解决不匹配数组和列表之间相乘的广播问题
【发布时间】:2020-03-28 10:41:19
【问题描述】:

我正在尝试将标量列表与数组相乘,但出现广播错误。

解决这个问题并获得三个不同的数组的pythonic方法是什么,每个数组都由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)

【问题讨论】:

  • 将 (3,1,1) 形状与 (1,10,2) 相乘将产生 (3,10,2)

标签: python arrays python-3.x list numpy


【解决方案1】:

IIUC:试试这个:

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]])

【讨论】:

    【解决方案2】:

    我会选择以下内容:

    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]]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      相关资源
      最近更新 更多