【问题标题】:Multiplying numpy 2d Array with 1d Array [duplicate]将 numpy 2d 数组与 1d 数组相乘 [重复]
【发布时间】:2017-06-05 00:11:35
【问题描述】:

我有一个 numpy 二维数组:

[[1,1,1],
[1,1,1],
[1,1,1],
[1,1,1]]

当二维数组的行长小于一维数组的长度时,我怎样才能得到它,以便它将索引从上到下与一维数组中的相应值相乘?例如上面乘以这个:

[10, 20, 30, 40]

得到这个:

 [[10, 10, 10],
 [20, 20, 20],
 [30, 30, 30]
 [40, 40, 40]]

可能是重复的,但我找不到我正在寻找的确切内容。提前致谢。

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    numpy 中的* 进行元素乘法,例如将一维数组乘以另一个一维数组:

    In [52]: np.array([3,4,5]) * np.array([1,2,3])
    Out[52]: array([ 3,  8, 15])
    

    当您将二维数组乘以一维数组时,二维数组的每一行都会发生同样的事情:

    In [53]: np.array([[3,4,5],[4,5,6]]) * np.array([1,2,3])
    Out[53]:
    array([[ 3,  8, 15],
           [ 4, 10, 18]])
    

    对于您的具体示例:

    In [66]: ones = np.ones(12, dtype=np.int).reshape(4,3)
    
    In [67]: a = np.array([10, 20, 30, 40])
    
    In [68]: (ones.T * a).T
    Out[68]:
    array([[10, 10, 10],
           [20, 20, 20],
           [30, 30, 30],
           [40, 40, 40]])
    

    【讨论】:

    • 必须查一下 .T 的意思,但我现在明白了,非常感谢。
    • 但是当你的行长度小于你的一维数组时会发生什么?那么转置仍然有效吗?
    • @user21398,如果行长度小于(或大于)一维数组,您将无法相乘。
    • 我明白了,那我得改写问题了。但那你怎么能做到呢?
    • 完美,感谢您抽出宝贵时间!
    猜你喜欢
    • 1970-01-01
    • 2021-01-28
    • 2020-04-04
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多