如何处理'ValueError:操作数无法与Numpy中的形状(10000,)(10000,10)'一起广播

时间:2017-06-17 02:26:05

标签: python numpy

代码的一部分:

batch = getRandomBatch(batch_size)
users_ind = batch[0, :, 0]
items_ind = batch[0, :, 2]
for i in range(25):
    sum_loss, err = computeLossFunction(batch)
    users_mat[users_ind, :] += err*items_mat[items_ind, :]

它抛出一个ValueError,'操作数无法与users_mat[users_ind, :] += err*items_mat[items_ind, :]中的形状(10000,)(10000,10)'一起广播。我不知道如何处理它。
为什么err的形状是(10000,)而不是(10000,1)?

=============================================== =========================

users_mat = np.random.rand(len_users, latent_space_dimension)
items_mat = np.random.rand(len_items, latent_space_dimension)
def getRandomBatch(batch_size):
    batch = np.random.choice(len_data_mat-1, size=(1, batch_size))
    batch = data_mat[batch]
    return batch

def computeLossFunction(data_mat):
    items_ind = data_mat[0, :, 2]
    rates = data_mat[0, :, 1]
    users_ind = data_mat[0, :, 0]
    vector_items = items_mat[items_ind, :]
    vector_users = users_mat[users_ind, :]
    dot_list = np.sum(vector_items*vector_users, axis=1)
    err = rates-dot_list
    piece = np.power(err, 2)+lambda_val*(np.sum(np.power(vector_users, 2), axis=1) + np.sum(np.power(vector_items, 2), axis=1))
    sum_loss = np.mean(piece)
    return sum_loss, err

data_mat是10000行和3列numpy矩阵
尝试后,err = err.reshape(-1,1)可以解决这个问题,但我仍然不明白为什么err的形状是(10000,)而不是(10000,1),所以我必须明确地重塑形状。 / p>

1 个答案:

答案 0 :(得分:0)

Save1 = 0 Save1 = 1 Save1 = 2 Save1 = 3 Save1 = 4 Save1 = 5 的数组上使用(10000,),反之亦然。

从您的代码中可以明显看出.reshape(-1, 1)是2d而不是3d,这可能是您混淆的根源。即:

data_mat