Как работает параметр 'dim' в torch.unique ()?

Для конкуренции:

Использование [FromBody] не требуется, когда контроллер аннотируется с атрибутом [ApiController] (поддерживается только в ASP.NET Core 2.1 и новее). Это удобный способ уменьшить количество необходимых атрибутов для действий и параметров действия.

Среди других удобных методов также есть введенные ActionResult для действий и контроллеров WebAPI-esque.

Вы можете получить дополнительную информацию из следующего сообщения в блоге на ASP.NET Core 2.1.0-preview1: Усовершенствования для создания веб-API

[ApiController] и ActionResult

ASP.NET Core 2.1 вводит новые соглашения с контроллером Web API, которые делают разработку Web API более удобной. Эти соглашения могут быть применены к контроллеру с использованием нового атрибута [ApiController]:

  • Автоматически отвечать с 400 при возникновении ошибок проверки - нет необходимости проверять состояние модели в вашем методе действий
  • Вывести более разумные значения по умолчанию для параметров действия: [FromBody] для сложных типов, [FromRoute], когда это возможно, в противном случае [FromQuery]
  • Требовать маршрутизацию атрибутов - действия недоступны по маршрутам, основанным на соглашениях

Вы также можете вернуть ActionResult из своих действий веб-API, что позволяет возвращать результаты произвольного действия или определенный тип возврата (благодаря некоторому умному использованию неявных операторов трансляции). Большинство методов действия веб-API имеют определенный тип возвращаемого значения, но также должны иметь возможность возвращать несколько разных результатов действий.

1
задан Sean Lee 18 January 2019 в 23:26
поделиться

1 ответ

Нужно признать, что функция unique иногда может быть очень запутанной, если не дать надлежащих примеров и объяснений.

Параметр dim указывает, к какому измерению тензорной матрицы вы хотите применить.

Например, в двумерной матрице dim=0 позволяет операции выполнять вертикально, где dim=1 означает горизонтально.

В качестве примера рассмотрим матрицу 4x4 с dim=1. Как вы можете видеть из моего кода ниже, операция unique применяется строка за строкой.

Вы замечаете двойное вхождение числа 11 в первом и последнем ряду. Numpy и Torch делают это, чтобы сохранить форму окончательной матрицы.

Однако, если вы не укажете какое-либо измерение, torch автоматически сгладит вашу матрицу, а затем применит к ней unique, и вы получите одномерный массив, содержащий уникальные данные.

import torch

m = torch.Tensor([
    [11, 11, 12,11], 
    [13, 11, 12,11], 
    [16, 11, 12, 11],  
    [11, 11, 12, 11]
])

output, indices = torch.unique(m, sorted=True, return_inverse=True, dim=1)
print("Ori \n{}".format(m.numpy()))
print("Sorted \n{}".format(output.numpy()))
print("Indices \n{}".format(indices.numpy()))

# without specifying dimension
output, indices = torch.unique(m, sorted=True, return_inverse=True)
print("Sorted (no dim) \n{}".format(output.numpy()))

Результат (dim = 1)

Ori
[[11. 11. 12. 11.]
 [13. 11. 12. 11.]
 [16. 11. 12. 11.]
 [11. 11. 12. 11.]]
Sorted
[[11. 11. 12.]
 [11. 13. 12.]
 [11. 16. 12.]
 [11. 11. 12.]]
Indices
[1 0 2 0]

Результат (без измерения)

Sorted (no dim)
[11. 12. 13. 16.]
0
ответ дан Rex Low 18 January 2019 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: