Есть хороший способ проверить, указывают ли numpy массив и тензор факела на те же базовые данные? - PullRequest
2 голосов
/ 08 марта 2020

Я хочу проверить, указывают ли массив numpy и тензор факела на одну и ту же базовую память. До сих пор я придумал простую проверку, но она не выглядит супер элегантно.

import numpy as np
import torch

# example 
a = np.random.randn(3,3)
b = torch.from_numpy(a)

assert a.__array_interface__['data'][0] == b.data_ptr()

Есть ли лучший способ сделать это? Кроме того, может ли произойти какое-либо потенциально неопределенное / неправильное поведение при использовании этого утверждения?

Заранее спасибо за ответы:)

1 Ответ

1 голос
/ 08 марта 2020

Это совершенно правильный способ доступа и сравнения указателей. Интерфейс массива предназначен для совместного использования буферов данных, поэтому он будет иметь правильный указатель. С учетом сказанного, если вы предпочитаете менее подробное решение, вы также можете получить его прямо так:

import numpy as np
import torch
​
# example 
a = np.random.randn(3,3)
b = torch.from_numpy(a)
​
print(a.ctypes.data)
print(b.data_ptr())
140413464706720
140413464706720
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...