代码之家  ›  专栏  ›  技术社区  ›  Aleph

找不到有效的numpy广播

  •  0
  • Aleph  · 技术社区  · 4 年前

    这可能是一个容易的问题,但我找不到任何切实可行的解决办法。我的代码有以下代码段,涉及3个嵌套的for循环。目标是为我的算法创建一个专门的强度矩阵 prediction ground_truth

        for i in range (batch):
          for j in range (img_width):
            for k in range (img_height):
                tensor=prediction[i][j][:]-prediction[i][k][:]
                extracted_intensity_pred[i][j][k]=torch.norm(tensor, 2)
                tensor=ground truth[i][j][:]-ground_truth[i][k][:]
                extracted_intensity_ground_truth[i][j][k]=torch.norm(tensor, 2)
    

    这种嵌套的for循环结构大大降低了执行速度。是否有任何广播实现(基于numpy或pytorch张量)?

    0 回复  |  直到 4 年前
        1
  •  1
  •   hpaulj    4 年前

    首先让我们清理一些符号; [:]

    但首先是什么尺寸,大部分是三维的?

    for i in range (batch):
          for j in range (img_width):
            for k in range (img_height):
                tensor = prediction[i,j,:] - prediction[i,k,:]
                # looks like a prediction[:,:,None]-prediction[:,None,:]; making 4d?
                extracted_intensity_pred[i,j,k] = torch.norm(tensor, 2)
                # what can torch.norm work with?
    

    所以也许只是

     tensor = prediction[:,:,None] - prediction(:,None,:]
     extracted_intensity_pred = torch.norm(tensor, ?)