【问题标题】:Multiplication in Python with arrays of different lengthPython中的乘法与不同长度的数组
【发布时间】:2016-09-04 16:32:02
【问题描述】:

我有五个 100x100 数组 A,我想将每个矩阵乘以长度为 5 的数组 B 中的一个值。我希望将 A 中的第一个矩阵乘以 B 中的第一个值和第二个矩阵由 B 中的第二个值等。我能做到吗?

【问题讨论】:

  • 是的,这是可能的。到目前为止,您尝试过什么?
  • 如果您有 5 个不同的 100x100 数组,请考虑使用 for 循环
  • 当你说“数组”时,你的意思是你正在使用numpy吗?当您说“五个 100x100 阵列”时,您是指 5 个不同的阵列,每个 100x100 还是一个尺寸为 5x100x100 的阵列?如果您的答案是“是”和“单个 5x100x100 数组”,那么 A*B[:,None,None] 是执行您请求的乘法的正确方法。
  • 我尝试了一个循环,但所有五个 A 矩阵都只乘以 B 中的第一个元素
  • 它们是五个不同的数组,每个 100x100

标签: python arrays matrix multiplication


【解决方案1】:

实际上,gboffi 在他的评论中已经提供了答案。然而我想详细说明这个答案,用代码给出一个具体的例子:

import numpy as np

#example data, all arrays of ones 100x100
A1 = A2 = A3 =A4 = A5 = np.ones((100, 100))    

#example array containing the factor for each matrix
B = np.array([1, 2, 3, 4, 5])

#create an array containing all matrices
A = np.array([A1, A2, A3, A4, A5])

A*B[:,None,None]

结果如下所示:

array([[[ 1.,  1.,  1., ...,  1.,  1.,  1.],
    [ 1.,  1.,  1., ...,  1.,  1.,  1.],
    [ 1.,  1.,  1., ...,  1.,  1.,  1.],
    ..., 
    [ 1.,  1.,  1., ...,  1.,  1.,  1.],
    [ 1.,  1.,  1., ...,  1.,  1.,  1.],
    [ 1.,  1.,  1., ...,  1.,  1.,  1.]],

   [[ 2.,  2.,  2., ...,  2.,  2.,  2.],
    [ 2.,  2.,  2., ...,  2.,  2.,  2.],
    [ 2.,  2.,  2., ...,  2.,  2.,  2.],
    ..., 
    [ 2.,  2.,  2., ...,  2.,  2.,  2.],
    [ 2.,  2.,  2., ...,  2.,  2.,  2.],
    [ 2.,  2.,  2., ...,  2.,  2.,  2.]],

   [[ 3.,  3.,  3., ...,  3.,  3.,  3.],
    [ 3.,  3.,  3., ...,  3.,  3.,  3.],
    [ 3.,  3.,  3., ...,  3.,  3.,  3.],
    ..., 
    [ 3.,  3.,  3., ...,  3.,  3.,  3.],
    [ 3.,  3.,  3., ...,  3.,  3.,  3.],
    [ 3.,  3.,  3., ...,  3.,  3.,  3.]],

   [[ 4.,  4.,  4., ...,  4.,  4.,  4.],
    [ 4.,  4.,  4., ...,  4.,  4.,  4.],
    [ 4.,  4.,  4., ...,  4.,  4.,  4.],
    ..., 
    [ 4.,  4.,  4., ...,  4.,  4.,  4.],
    [ 4.,  4.,  4., ...,  4.,  4.,  4.],
    [ 4.,  4.,  4., ...,  4.,  4.,  4.]],

   [[ 5.,  5.,  5., ...,  5.,  5.,  5.],
    [ 5.,  5.,  5., ...,  5.,  5.,  5.],
    [ 5.,  5.,  5., ...,  5.,  5.,  5.],
    ..., 
    [ 5.,  5.,  5., ...,  5.,  5.,  5.],
    [ 5.,  5.,  5., ...,  5.,  5.,  5.],
    [ 5.,  5.,  5., ...,  5.,  5.,  5.]]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    相关资源
    最近更新 更多