Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pytorch:如何在python字典中通过张量(键)访问张量(值)_Python_Python 3.x_Pytorch - Fatal编程技术网

Pytorch:如何在python字典中通过张量(键)访问张量(值)

Pytorch:如何在python字典中通过张量(键)访问张量(值),python,python-3.x,pytorch,Python,Python 3.x,Pytorch,我有一本有张量键和张量值的字典。我想通过键访问这些值 from torch import tensor x = {tensor(0): [tensor(1)], tensor(1): [tensor(0)]} for i in x.keys(): print(i, x[i]) 返回: tensor(0) [tensor(1)] tensor(1) [tensor(0)] 但是当我尝试访问值而不循环键时 try: print(x[tensor(0)]) except:

我有一本有张量键和张量值的字典。我想通过键访问这些值

from torch import tensor
x = {tensor(0): [tensor(1)], tensor(1): [tensor(0)]}
for i in x.keys():
  print(i, x[i]) 
返回:

tensor(0) [tensor(1)]
tensor(1) [tensor(0)]
但是当我尝试访问值而不循环键时

try:
    print(x[tensor(0)])

except:
    print(Exception)
    print(x[0])
引发异常:

 KeyError                                   Traceback (most recent call last)
 <ipython-input-34-746d28dcd450> in <module>()
  6 try:
  ----> 7   print(x[tensor(0)])
  8 

  KeyError: tensor(0)

  During handling of the above exception, another exception occurred:

  KeyError                                  Traceback (most recent call last)
  <ipython-input-34-746d28dcd450> in <module>()
  9 except:
  10   print(Exception)
  ---> 11   print(x[0])
  12 continue

  KeyError: 0

这里至少有三个问题

如果x是张量键的字典,那么x[0]当然不起作用。0不是它的键。因此,在另一个异常期间发生了内部密钥错误。 实际上与您的错误无关,但printException几乎肯定不是您想要的。如果类对象是类异常的正确术语,它将打印该类对象。你可能是故意的
except Exception as e:
  print(e)
或者更具体地说,除了KeyError,否则它只会捕获每一种异常。 真正的问题是:首先你不想使用张量作为键。它是一种可变类型,通过引用而不是通过值进行比较。每个tensorsomething调用都将创建一个新对象,散列到与指定为key的tensorsomething不同的值

使用实际整数代替


这里至少有三个问题

如果x是张量键的字典,那么x[0]当然不起作用。0不是它的键。因此,在另一个异常期间发生了内部密钥错误。 实际上与您的错误无关,但printException几乎肯定不是您想要的。如果类对象是类异常的正确术语,它将打印该类对象。你可能是故意的
except Exception as e:
  print(e)
或者更具体地说,除了KeyError,否则它只会捕获每一种异常。 真正的问题是:首先你不想使用张量作为键。它是一种可变类型,通过引用而不是通过值进行比较。每个tensorsomething调用都将创建一个新对象,散列到与指定为key的tensorsomething不同的值

使用实际整数代替


在PyTorch中,张量的散列是其id的函数,而不是实际值。因为Python字典使用哈希进行查找,所以查找失败。看


为了实现您想要的,您可以使用普通Python整数作为键,或者使用嵌入对象作为x。

在PyTorch中,张量的散列是其id的函数,而不是实际值。因为Python字典使用哈希进行查找,所以查找失败。看


为了实现您想要的,您可以使用普通Python整数作为键,或者使用嵌入对象作为x。

为什么要使用它,而不是torch.nn.Embedding?它提供整数查找,就像您的示例一样。无论如何,问题来自hashtensor0!=hashtensor0,所以查找失败。我正在使用pytorch中的字典进行简单的数学运算。我不是在研究神经网络。但是错误似乎很奇怪。嵌入只是一个查找表。没什么,没什么特别的。你为什么要这个,而不是火炬?它提供整数查找,就像您的示例一样。无论如何,问题来自hashtensor0!=hashtensor0,所以查找失败。我正在使用pytorch中的字典进行简单的数学运算。我不是在研究神经网络。但是错误似乎很奇怪。嵌入只是一个查找表。除此之外,没什么特别的。@arya mccarthy所以,从你的两个答案来看,好的解决方法是避免使用张量键,而使用实际整数作为键。感谢一票赞成,一票接受。是的,我不太清楚PyTorch的具体情况,但如果你真的使用嵌入,那么嵌入Arya也听起来是个更好的主意。@Arya mccarthy所以,从你的两个答案来看,好的解决方法是避免使用张量键,而使用实际整数作为键。感谢一票赞成,一票接受。是的,我不太清楚PyTorch的具体情况,但是如果你真的使用嵌入,那么嵌入Arya听起来也是一个更好的主意。我不知道nn.Embedding用例。我一定会试试。我不知道nn.Embedded用例。我一定会试试的。