Два возможных подхода.
delete from child_table
where parent_id in (
select parent_id from parent_table
where updd_tms != (sysdate-30)
- теперь удалить записи родительской таблицы delete from parent_table
where updd_tms != (sysdate-30);
---- Исходя из вашего требования, похоже, что вам, возможно, придется использовать PL / SQL. Я посмотрю, может ли кто-нибудь опубликовать на нем чистое SQL-решение (в этом случае это определенно будет способ).
declare
v_sqlcode number;
PRAGMA EXCEPTION_INIT(foreign_key_violated, -02291);
begin
for v_rec in (select parent_id, child id from child_table
where updd_tms != (sysdate-30) ) loop
-- delete the children
delete from child_table where child_id = v_rec.child_id;
-- delete the parent. If we get foreign key violation,
-- stop this step and continue the loop
begin
delete from parent_table
where parent_id = v_rec.parent_id;
exception
when foreign_key_violated
then null;
end;
end loop;
end;
/
Интерфейс Dataset
требует, чтобы
Все подклассы переопределяли
blockquote>__len__
, который обеспечивает размер набора данных, и__getitem__
, поддерживающие целочисленную индексацию в диапазоне от0
доlen(self)
эксклюзив., который явно не упоминает нарезку - поведение нарезки других наборов данных является дополнительной функцией. Если вы хотите получить все данные сразу, вы можете посмотреть реализацию и просто использовать тензоры
mnist.data
иmnist.targets
, определенные к концу__init__
.Если вы хотите преобразовать данные, вы можете использовать
data = [mnist_ds[i] for i in range(len(mnist_ds))] xs = torch.stack([d[0] for d in data], dim=0) ys = torch.stack([d[1] for d in data], dim=0)
или преобразовать тензор
mnist.data
одновременно (хотя это не будет работать с преобразованиямиtorchvision.transform
).
Я нашел 2 решения для преобразования набора данных torchvision MNIST в тензоры. Первый из них взят из комментария Фабио Переса:
print("\nFirst...")
st = time()
x_all_ts = torch.tensor([mnist_ds[i][0].numpy() for i in range(0, len(mnist_ds))])
t_all_ts = mnist_ds.train_labels
print(f"{time()-st} images:{x_all_ts.size()} targets:{t_all_ts.size()} ")
print("\nSecond...")
st = time()
mnist_dl = DataLoader(dataset=mnist_ds, batch_size=len(mnist_ds))
x_all_ts2, t_all_ts2 = list(mnist_dl)[0]
print(f"{time()-st} images:{x_all_ts2.size()} targets:{t_all_ts2.size()} ")
First...
19.573785066604614 images:torch.Size([60000, 1, 16, 16]) targets:torch.Size([60000])
Second...
16.826476573944092 images:torch.Size([60000, 1, 16, 16]) targets:torch.Size([60000])
Пожалуйста, дайте мне знать, если вы найдете лучшие из них.