Python:在不使用迭代的情况下将for循环操作扩展到矩阵中的每一行

标签 python tensorflow

我有一段代码是这样的:

a = Y[0]; b = Z[0]
print(a, b)
loss = 0
for i in range(len(a)):
    k = len(a)-i
    loss += (2**(k-1))*np.abs(a[i]-b[i])
print(loss)

其中 YZ 的维度是 250 x 10,每行是 10 位二进制值。例如,print(a,b) 打印如下:[1 0 0 0 0 0 0 0 1 0] [0 0 0 1 1 1 1 1 0 0]

现在我想在 for 循环中为 YZ 之间的相应行应用两行函数。但我不想做这样的事情:

for j in range(Y.shape[0]):
    a = Y[j]; b = Z[j]
    loss = 0
    for i in range(len(a)):
        k = len(a)-i
        loss += (2**(k-1))*np.abs(a[i]-b[i])
    print(loss)

我本质上是在尝试在 keras/tensorflow 中创建自定义损失函数。那个 for 循环示例不适用于大型张量操作。我如何使用某种批处理矩阵运算而不是 for 循环来完成它?

最佳答案

你可以这样做:

factor = 2**np.arange(Y.shape[1])[::-1]
loss = np.sum(factor * np.abs(Y-Z), axis=-1)

关于Python:在不使用迭代的情况下将for循环操作扩展到矩阵中的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65785897/

相关文章:

python - 在 HTML 字符串中每 N 个字符添加一个分隔符

Tensorflow:如何通过索引获取张量值并分配新值

numpy - 如何在 tensorflow 中打印完整(未截断)的张量?

python - tf.where 的 TensorFlow 梯度在不应该返回 NaN 时返回 NaN

python - 具有不同 k-hot 编码向量的 LSTM

python - 如何使用xpath获取最高页码?

python - 如何在python中做一个条件装饰器

python - 我怎样才能从 Python 的 namedtuple 获得降序的 OrderedDict?

python - 使用 tensorflow 概率解决掷骰子和抛硬币问题,方差是错误的

python - 玛雅 2018 Python+QT : Querying Value of Imported TextField