2016-05-04 3 views

ответ

3

NaN и Inf выглядят как специальные переменные при использовании без круглых скобок.

Но они actually functions.

NaN(ones (1, 3)) расширился до NaN ([1, 1, 1]), который, по-видимому, оценивается как NaN (1, 1, 1). То есть к массиву 1x1x1, который имеет только один элемент.

Правильный способ инициализации 1x3 NaN массив является

NaN (1, 3) 

То же самое для Inf.


После @carandraug внушения, здесь небольшое отступление .

Возможно использование NaN()(ones(1, 3)).

В этом выражении NaN() оценивает скалярное значение NaN (а не функцию больше). ones(1, 3) - [1, 1, 1].

Таким образом, промежуточный этап может быть прочитан как <NaN scalar value>([1 1 1]).

Тогда вспомните how indexing works. Индексирование массива A с массивом целых чисел indexes написано A(indexes). Например

A([i1, i2, i3]) 

Это подготавливает массив того же размера, как indexes (1x3 здесь). Каждый элемент этого нового массива получит значение элемента A, имеющего индекс, заданный соответствующим элементом indexes. Это

[A(i1), A(i2), A(i3)] 

Таким образом, результат 2(ones (1, 3)), т.е. 2([1, 1, 1]) очевидно [2(1), 2(1), 2(1)]. т.е. [2, 2, 2]. (Помня, что скаляр можно интерпретировать как один элементный массив. Таким образом, 2(1) означает первый элемент массива [2], который равен 2).

Аналогичным образом, промежуточный этап <NaN scalar value>([1 1 1]) окончательно преобразуется в

[<NaN scalar value>, <NaN scalar value>, <NaN scalar value>] 

или просто [NaN, NaN, NaN].

+2

Возможно, стоит объяснить другую сторону, как можно использовать тот же синтаксис для работы с 'Inf' и' NaN', e.g., 'Inf() (единицы (1, 3))'. – carandraug

+0

Или, может быть, 'NaN (размер (единицы (1,3)))', хотя это и лишнее. @carandraug: 'Inf() (те (1, 3))' недействителен Matlab. Не уверен, что вы предлагаете. – horchler

+2

@horchler Я просто предлагал, чтобы это было приятное дополнение (только от образовательного POV), чтобы объяснить, почему '2 ([1 1 1])' работает и показывает тот же синтаксис с 'Inf() ([1 1 1]) '. Опять же, только образовательный, ответ правильный, как есть. Кроме того, этот вопрос Octave не помечен Matlab, поэтому недействительный Matlab не должен быть проблемой. – carandraug