Browse Source

Update 'data_sampler.py'

master
Zahra Asgari 14 hours ago
parent
commit
0e7a2c7f11
1 changed files with 42 additions and 22 deletions
  1. 42
    22
      data_sampler.py

+ 42
- 22
data_sampler.py View File

@@ -258,38 +258,58 @@ class ExterSampler:
"""
Samples train/test data and masks based on row indices.
"""
def __init__(
self,
original_adj_mat: np.ndarray,
null_mask: np.ndarray,
train_index: np.ndarray,
test_index: np.ndarray
) -> None:
def __init__(self, original_adj_mat, null_mask, train_index, test_index):
super(ExterSampler, self).__init__()
self.adj_mat = original_adj_mat
self.null_mask = null_mask
self.train_index = train_index
self.test_index = test_index
self.train_data, self.test_data = self._sample_train_test_data()
self.train_mask, self.test_mask = self._sample_train_test_mask()
self.train_data, self.test_data = self.sample_train_test_data()
self.train_mask, self.test_mask = self.sample_train_test_mask()

def _sample_train_test_data(self) -> Tuple[torch.Tensor, torch.Tensor]:
"""Samples train and test data based on row indices."""
test_data = self.adj_mat.copy()
def sample_train_test_data(self):
# If self.adj_mat is already a Tensor, convert it to a numpy array
if isinstance(self.adj_mat, torch.Tensor):
adj = self.adj_mat.cpu().numpy().copy()
else:
adj = self.adj_mat.copy()

# Create test_data by copying and modifying the rows corresponding to train_index
test_data = adj.copy()
test_data[self.train_index, :] = 0
train_data = self.adj_mat - test_data
return torch.from_numpy(train_data), torch.from_numpy(test_data)
train_data = adj - test_data

def _sample_train_test_mask(self) -> Tuple[torch.Tensor, torch.Tensor]:
"""Creates train and test masks with negative sampling."""
neg_value = np.ones(self.adj_mat.shape, dtype=np.float32) - self.adj_mat - self.null_mask
neg_train = neg_value.copy()
# Convert back to Tensor (since subsequent operations are performed on Tensors)
train_data = torch.from_numpy(train_data)
test_data = torch.from_numpy(test_data)
return train_data, test_data

def sample_train_test_mask(self):
# Ensure that adj_mat and null_mask are numpy arrays
if isinstance(self.adj_mat, torch.Tensor):
adj = self.adj_mat.cpu().numpy()
else:
adj = self.adj_mat
if isinstance(self.null_mask, torch.Tensor):
null_mask = self.null_mask.cpu().numpy()
else:
null_mask = self.null_mask

neg_value = np.ones(adj.shape, dtype=np.float32)
neg_train = neg_value - adj - null_mask
neg_train[self.test_index, :] = 0
neg_test = neg_value.copy()
neg_test = neg_value - adj - null_mask
neg_test[self.train_index, :] = 0

train_mask = (self.train_data.numpy() + neg_train).astype(bool)
test_mask = (self.test_data.numpy() + neg_test).astype(bool)
return torch.from_numpy(train_mask), torch.from_numpy(test_mask)
train_data_np = self.train_data.cpu().numpy() if isinstance(self.train_data, torch.Tensor) else self.train_data
test_data_np = self.test_data.cpu().numpy() if isinstance(self.test_data, torch.Tensor) else self.test_data

train_mask = (train_data_np + neg_train).astype(bool)
test_mask = (test_data_np + neg_test).astype(bool)
train_mask = torch.from_numpy(train_mask)
test_mask = torch.from_numpy(test_mask)
return train_mask, test_mask
class RegressionSampler(object):

Loading…
Cancel
Save