Nano Hash - криптовалюты, майнинг, программирование

Функция градиента MATLAB меняет местами размеры x и y?

Я пытаюсь вычислить градиент трехмерной матрицы с помощью MATLAB (версия 2016a). Если я наберу «справка градиента», он скажет следующее:

"HX и HY могут быть либо скалярами, чтобы задать расстояние между координатами, либо векторами, чтобы указать координаты точек. Если HX и HY являются векторами, их длина должна соответствовать соответствующему размеру F ." (выделено мной).

Вот пример кода:

x = 1:30; nx = length(x);
y = 1:62; ny = length(y);
z = 1:23; nz = length(z);

F = rand(nx,ny,nz);

[FX,FY,FZ] = gradient(F,x,y,z);

Здесь я ввожу векторы x, y и z для вычисления градиента. Это векторы, и в справке сказано, что HX и HY должны иметь длину, совпадающую с соответствующей размерностью F. X-размерность F имеет длину nx. Таким образом, вектор x также имеет длину nx. Должно работать, судя по хелпу.

Однако я получаю сообщение об ошибке:

Index exceeds matrix dimensions.

Error in gradient (line 112)
            h = h(3:n) - h(1:n-2);

Когда я углубляюсь в функцию «градиент», я натыкаюсь на эту строку во встроенной функции «parse_inputs»:

% Swap 1 and 2 since x is the second dimension and y is the first.
loc = v;
if ndim > 1
    loc(2:-1:1) = loc(1:2);
end

Что здесь происходит?

Почему MATLAB меняет местами размеры x и y?

Если я сделаю следующий код и поменяю местами векторы x и y, то код сработает.

x = 1:30; nx = length(x);
y = 1:62; ny = length(y);
z = 1:23; nz = length(z);

F = rand(nx,ny,nz);

[FX,FY,FZ] = gradient(F,y,x,z);

Я просто не понимаю, почему. Я просмотрел переполнение стека, но не нашел ответа на вопрос.

В любом случае кажется, что справка несколько вводит в заблуждение, потому что на самом деле вам нужно поменять местами x и y, чтобы функция заработала...

11.10.2018


Ответы:


1

Это не gradient меняет местами размеры, это все остальное...

MATLAB индексирует массивы как (row,column), а размеры массивов даются в том же порядке, что и [height,width].

Однако всякий раз, когда в документации к какой-либо функции упоминаются x и y, x всегда горизонтально, а y вертикально. Таким образом, MATLAB индексирует как (y,x).

Правильный способ исправить код:

x = 1:30; nx = length(x);
y = 1:62; ny = length(y);
z = 1:23; nz = length(z);

F = rand(ny,nx,nz);   % <<< Note the order here!

[FX,FY,FZ] = gradient(F,x,y,z);

Личное мнение: это ужасно сбивает с толку, я видел, как многие люди совершали ошибки из-за этого, и сам тоже допустил немало ошибок. Но они очень согласуются с этим в документации MATLAB, используя (i,j) или (x,y) в зависимости от требуемого порядка — за исключением ndgrid, где в документации используется x1,x2,x3,..., но на самом деле должна была использоваться другая буква.

11.10.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..