操作数无法与形状 (100,4) (4,1) 一起广播

Operands could not be broadcast together with shapes (100,4) (4,1)

此代码应在范围内生成随机数据。我知道数组存在不匹配问题,但我不确定它是什么。这是否意味着代码中定义的下限和上限使其无法工作?

import pandas as pd
import numpy as np
from scipy.stats import qmc

sampler = qmc.LatinHypercube(d=4)

u_bounds = np.array([[2], [10], [10], [2]])
l_bounds = np.array([[0.1], [0.1], [0.1], [0.1]])
data = sampler.lhs_method(100)*(u_bounds-(l_bounds)) + (l_bounds)
print(data)

错误代码

ValueError: operands could not be broadcast together with shapes (100,4) (4,1) 

你得到这个错误是因为你做了 a * b,并且 * 运算符用于逐点乘法,如果需要的话可以使用广播来完成,但是形状 (100, 4)(4, 1)无法广播

您需要矩阵乘法,为此您需要使用 @ operator, or the np.matmul() 函数*

data = sampler.lhs_method(100) @ (u_bounds - l_bounds) + l_bounds

# or 

data = np.matmul(sampler.lhs_method(100), u_bounds - l_bounds) + l_bounds

Daniel pointed out 一样,你会得到类似的错误,因为矩阵乘法sampler.lhs_method(100) @ (u_bounds - l_bounds)是一个形状为(100, 1)的矩阵,而l_bounds是一个形状为(4, 1),不能加在一起,所以你需要检查你的数学。

*我删除了不必要的括号。