Arrays NaN或Inf数组预分配

Arrays NaN或Inf数组预分配,arrays,octave,pre-allocation,Arrays,Octave,Pre Allocation,数组索引可用于。比如说 2(ones(1, 3)) ans = 2 2 2 但这不适用于NaN或Inf NaN(ones(1, 3)) ans = NaN 为什么?NaN和Inf在没有括号的情况下看起来像特殊变量 但事实确实如此 NaN(one(1,3))扩展为NaN([1,1,1]),其计算结果显然类似于NaN(1,1,1)。这是一个1x1x1数组,它只有一个元素 初始化1x3 NaN阵列的正确方法是 NaN (1, 3) 同样适用于Inf 根据@carandraug的

数组索引可用于。比如说

2(ones(1, 3))
ans =

   2   2   2
但这不适用于NaN或Inf

NaN(ones(1, 3))
ans = NaN

为什么?

NaN
Inf
在没有括号的情况下看起来像特殊变量

但事实确实如此

NaN(one(1,3))
扩展为
NaN([1,1,1])
,其计算结果显然类似于
NaN(1,1,1)
。这是一个
1x1x1
数组,它只有一个元素

初始化1x3 NaN阵列的正确方法是

NaN (1, 3)
同样适用于
Inf


根据@carandraug的建议,这里有一点离题

你也可以使用
NaN()(One(1,3))

在此表达式中,
NaN()
计算为
NaN
标量值(不再是函数)<代码>一(1,3)的计算结果为
[1,1,1]

因此,中间步骤可以理解为
([1])

那就记住。 编写带有整数数组的数组
A
索引
的索引
A(索引)
。比如说

A([i1, i2, i3])
这将准备一个与
索引大小相同的数组(此处为1x3)。这个新数组的每个元素将获得
A
元素的值,该元素的索引由
索引的相应元素给出。就是

[A(i1), A(i2), A(i3)]
所以
2(一(1,3))
的结果,即
2([1,1,1])
显然是
[2(1),2(1),2(1)]
。i、 e.
[2,2,2]
。 (请记住,标量可以解释为单个元素数组。因此
2(1)
表示数组
[2]
的第一个元素,即
2

类似地,中间步骤
([1])
最终在中转换

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

或者简单地说,
[NaN,NaN,NaN]

可能值得解释另一方面,如何使相同的语法与
Inf
NaN
一起工作,例如,
Inf()(one(1,3))
。或者
NaN(size(one(1,3))
,尽管这是多余的@carandraug:
Inf()(一(1,3))
无效。我不确定你的建议是什么。@霍奇勒我只是建议这是一个很好的补充(仅从教育角度),来解释为什么
2([1 1])
有效,并显示与
Inf()([1 1 1])完全相同的语法。
。同样,只有教育性的,答案是正确的。此外,这是一个没有用Matlab标记的倍频程问题,因此无效的Matlab不应该是一个问题。