我收到以下代码的上述值错误:
np.random.seed(0);
num_samples=1000; len_time=50; dim_data=1;
#The times series X_{1:T} is uniform in the grid [0,1]^2;
#X_train is a collection of such time series
X_train=np.random.uniform(0,1,(num_samples,len_time+1,dim_data));
#Regression coeffecients
beta_1=np.array([-1]); beta_2= np.array([0.5]);
Y_train=np.zeros_like(X_train);
#Creating the model Y_t=X_t.dot(beta_1)+X_{t-1}.dot(beta_2);
for k in range(len(X_train)):
x=X_train[k];
Y_train[k]=x.dot(beta_1)+(np.roll(x,1,axis=0)).dot(beta_2)
它在for循环的最后一行显示值错误。我不明白为什么这会成为一个问题。我单独验证了for循环中的那一行,没有任何问题。在
要进行广播,维度必须是兼容的,并且要将1D数组分配给2D数组。如果}是1D。或者,你可以在方程的RHS上加一个维数,这样它也是2D的:
dim_data
总是1,你可以去掉它,或者做Y_train=squeeze(np.zeros_like(X_train));
使Y_train
2D,那么{在这种情况下,如果
dim_data
为1,则RHS将被添加到Y_train[k]
的每一列。这就是纽比语中“广播”的意思。在错误是说,你计算的RHS生成了一个(51,)1d数组,但LHS插槽是(51,1),一个2d。广播可以将(51,)改为(1,51),但不能改为(51,1)。在
下一步是了解维度的来源。在
X_train
创建为(num_samples,len_time+1,dim_data)
,和Y_train
个副本。因此Y_train[k]
具有(len_time+1,dim_data)
的形状,因此是2d(51,1)。对x
相同RHS有2个与广播兼容的项,并且由于
dot
和而产生(51,)。在要真正修复此问题,您需要使用大于1的
dim_data
。如果是1,你可以只挤出维度,但如果第三维度更大,那就没用了。在为什么当RHS用
dot
产品从x
中删除最后一个维度时,Y_train
初始化为3d?在相关问题 更多 >
编程相关推荐