罗兰谈MATLAB的艺术

将想法转化为MATLAB

请注意

罗兰谈MATLAB的艺术已退役,不会更新。

空数组演算

在我开始使用MATLAB程序之前,MATLAB就已经有了空数组。当我开始时,唯一的大小空数组是0 x0.当第5版发布时,空数组出现了n维,并且变得更有形状。

内容

即使是涉及空数组的相对简单的表达式也会不时引起混淆,特别是与MATLAB中的其他规则(例如值通常从输入传播到输出)。让我们稍微研究一下空数组来了解一些情况。

来自新闻组

帖子关于MATLAB新闻组的讨论激发了我谈论空数组的兴趣。以下是原文的节选:

我知道Nan+4 = Nan,但为什么[]+4 = []?我还应该知道更多的“黑洞行为”吗?

MATLAB中的Dimensions Matter

在MATLAB中,维度很重要,当维度不一致时,你会得到错误消息。在早期,我们发现将标量作为运算符的异常处理是很方便的(例如,,.),并将它们视为扩展到另一个操作数的大小。所以

Rand (3,3) +
Ans = 4.10648118878907 4.09875960183274 3.28347899221701 3.29920573526734 3.62696830231263 3.56335393621607 4.11218543535041 3.94187312247859 4.05732817877886

添加值π随机的3 x3刚刚创建的。这就好像一个3 x3用值填充的常量数组π创建并将elementwise添加到另一个数组。

这对空操作数意味着什么呢?它的大小至少有一个0值。所以MATLAB扩展了π在这个表达式中[] + PI大小与…相同[](这恰好是0 x0这里)。当这种情况发生时,MATLAB创建第二个空数组,然后添加这两个空数组。因此我们得到

[] + PI
Ans = []

返回空输出。

MATLAB将标量展开规则应用于运算符。举个例子,大小(任何+标量)大小(任何).作为一个逻辑上但有时令人惊讶的结果,空数组经常(但不总是)在计算中传播。什么时候不会发生这种情况?在一些函数中,数学逻辑分析需要不同的结果。

总和([])
Ans = 0
刺激([])
Ans = 1

为什么和是0,积是1?因为它们分别是和和和积的单位元(在群论中)。考虑一下如何开始计算和或乘积,以及如何初始化第一个值。这是在添加或乘以任何数组元素之前给出的值,因此分别为0和1。

空数组形状

空数组可以是n维的,不需要所有维都为0。但是,他们仍然必须遵守关于需要一致同意的尺寸的规则。结果可能会让你大吃一惊,但它们确实符合逻辑。下面是一个尝试添加两个空数组的示例,结果出现错误!

A = 0 (0,1) b = 0 (1,0)试一试a + bMEplus流(' \ n ') disp (MEplus.message)结束
a =空矩阵:0乘1 b =空矩阵:1乘0矩阵维数必须一致。

参考

有关空数组的更多信息,请查看这个页面在文档中。

有一个空问题?

有什么空洞的问题吗(真的,关于空洞的问题!)?或意见吗?将它们贴在这里




使用MATLAB®7.9发布

|