<tfoot id='DzwY0'></tfoot>
      <i id='DzwY0'><tr id='DzwY0'><dt id='DzwY0'><q id='DzwY0'><span id='DzwY0'><b id='DzwY0'><form id='DzwY0'><ins id='DzwY0'></ins><ul id='DzwY0'></ul><sub id='DzwY0'></sub></form><legend id='DzwY0'></legend><bdo id='DzwY0'><pre id='DzwY0'><center id='DzwY0'></center></pre></bdo></b><th id='DzwY0'></th></span></q></dt></tr></i><div id='DzwY0'><tfoot id='DzwY0'></tfoot><dl id='DzwY0'><fieldset id='DzwY0'></fieldset></dl></div>
    1. <small id='DzwY0'></small><noframes id='DzwY0'>

      • <bdo id='DzwY0'></bdo><ul id='DzwY0'></ul>
    2. <legend id='DzwY0'><style id='DzwY0'><dir id='DzwY0'><q id='DzwY0'></q></dir></style></legend>

        尺寸为M&lt;32的火炬张量分度错误?

        时间:2024-08-11
        <i id='J8s3T'><tr id='J8s3T'><dt id='J8s3T'><q id='J8s3T'><span id='J8s3T'><b id='J8s3T'><form id='J8s3T'><ins id='J8s3T'></ins><ul id='J8s3T'></ul><sub id='J8s3T'></sub></form><legend id='J8s3T'></legend><bdo id='J8s3T'><pre id='J8s3T'><center id='J8s3T'></center></pre></bdo></b><th id='J8s3T'></th></span></q></dt></tr></i><div id='J8s3T'><tfoot id='J8s3T'></tfoot><dl id='J8s3T'><fieldset id='J8s3T'></fieldset></dl></div>

            <small id='J8s3T'></small><noframes id='J8s3T'>

            <tfoot id='J8s3T'></tfoot>
              <tbody id='J8s3T'></tbody>
              <bdo id='J8s3T'></bdo><ul id='J8s3T'></ul>
              <legend id='J8s3T'><style id='J8s3T'><dir id='J8s3T'><q id='J8s3T'></q></dir></style></legend>

                1. 本文介绍了尺寸为M&lt;32的火炬张量分度错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我正在尝试通过索引矩阵访问pytorch张量,但我最近发现这段代码找不到无法工作的原因。

                  下面的代码分为两部分。前半部分被证明是有效的,而后半部分是错误的。我看不出原因。有没有人能解释一下这件事?

                  import torch
                  import numpy as np
                  
                  a = torch.rand(32, 16)
                  m, n = a.shape
                  xx, yy = np.meshgrid(np.arange(m), np.arange(m))
                  result = a[xx]   # WORKS for a torch.tensor of size M >= 32. It doesn't work otherwise.
                  
                  a = torch.rand(16, 16)
                  m, n = a.shape
                  xx, yy = np.meshgrid(np.arange(m), np.arange(m))
                  result = a[xx]   # IndexError: too many indices for tensor of dimension 2
                  

                  如果我更改a = np.random.rand(16, 16),它也可以正常工作。

                  推荐答案

                  首先,让我快速了解一下如何使用一个数值数组和另一个张量来索引张量。

                  示例:这是我们要索引的目标张量

                      numpy_indices = torch.tensor([[0, 1, 2, 7],
                                                    [0, 1, 2, 3]])   # numpy array
                  
                      tensor_indices = torch.tensor([[0, 1, 2, 7],
                                                     [0, 1, 2, 3]])   # 2D tensor
                  
                      t = torch.tensor([[1,  2,  3,   4],            # targeted tensor
                                        [5,  6,  7,   8],
                                        [9,  10, 11, 12],
                                        [13, 14, 15, 16],
                                        [17, 18, 19, 20],
                                        [21, 22, 23, 24],
                                        [25, 26, 27, 28],
                                        [29, 30, 31, 32]])
                       numpy_result = t[numpy_indices]
                       tensor_result = t[tensor_indices]
                  
                  • 使用2D数值数组编制索引:索引的读取方式类似于成对(x,y)张量[行,列],例如t[0,0], t[1,1], t[2,2], and t[7,3]

                    print(numpy_result)  # tensor([ 1,  6, 11, 32])
                    
                  • 使用2D张量进行索引:以行的方式遍历索引张量,每个值都是目标张量中一行的索引。 例如[ [t[0],t[1],t[2],[7]] , [[0],[1],[2],[3]] ]参见下例,索引后的tensor_result的新形状为(tensor_indices.shape[0],tensor_indices.shape[1],t.shape[1])=(2,4,4)

                    print(tensor_result)     # tensor([[[ 1,  2,  3,  4],
                                             #          [ 5,  6,  7,  8],
                                             #          [ 9, 10, 11, 12],
                                             #          [29, 30, 31, 32]],
                    
                                             #          [[ 1,  2,  3,  4],
                                             #           [ 5,  6,  7,  8],
                                             #           [ 9, 10, 11, 12],
                                             #           [ 13, 14, 15, 16]]])
                    

                  如果您尝试在numpy_indices中添加第三行,您将收到相同的错误,因为索引将由3D表示,例如,(0,0,0).(7,3,3)。

                  indices = np.array([[0, 1, 2, 7],
                                      [0, 1, 2, 3],
                                      [0, 1, 2, 3]])
                  
                  print(numpy_result)   # IndexError: too many indices for tensor of dimension 2
                  

                  但是,张量索引不是这种情况,形状将更大(3,4,4)。

                  最后,如您所见,这两种索引类型的输出完全不同。要解决您的问题,您可以使用

                  xx = torch.tensor(xx).long()  # convert a numpy array to a tensor
                  

                  高级索引(NUMPY_INDEX>;3行)的情况如何,因为您的情况仍然不明确且未解决,您可以检查1、2、3。

                  这篇关于尺寸为M&lt;32的火炬张量分度错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:在Requirements.txt中包含.whl安装 下一篇:如何将图形从networkx加载到PyTorch几何图形中,并设置节点特征和标签?

                  相关文章

                  <small id='OEHsP'></small><noframes id='OEHsP'>

                  1. <tfoot id='OEHsP'></tfoot>

                    1. <legend id='OEHsP'><style id='OEHsP'><dir id='OEHsP'><q id='OEHsP'></q></dir></style></legend>
                      <i id='OEHsP'><tr id='OEHsP'><dt id='OEHsP'><q id='OEHsP'><span id='OEHsP'><b id='OEHsP'><form id='OEHsP'><ins id='OEHsP'></ins><ul id='OEHsP'></ul><sub id='OEHsP'></sub></form><legend id='OEHsP'></legend><bdo id='OEHsP'><pre id='OEHsP'><center id='OEHsP'></center></pre></bdo></b><th id='OEHsP'></th></span></q></dt></tr></i><div id='OEHsP'><tfoot id='OEHsP'></tfoot><dl id='OEHsP'><fieldset id='OEHsP'></fieldset></dl></div>

                        <bdo id='OEHsP'></bdo><ul id='OEHsP'></ul>