操作数无法与形状 (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)
,不能加在一起,所以你需要检查你的数学。
*我删除了不必要的括号。
此代码应在范围内生成随机数据。我知道数组存在不匹配问题,但我不确定它是什么。这是否意味着代码中定义的下限和上限使其无法工作?
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)
,不能加在一起,所以你需要检查你的数学。
*我删除了不必要的括号。