罗兰谈MATLAB的艺术

将想法转化为MATLAB

请注意

罗兰谈MATLAB的艺术已存档,不会更新。

零进化

今天的帖子将带我们参观这个功能的历史之旅0,在许多方面都属于相关的功能眼睛真正的兰德randn,复杂的

你可能会想"一个函数怎么能像0需要进化吗?”-但是你会看到MATLAB的一些变化导致了进化。

内容

零的原始行为

在Cleve最初的Fortran MATLAB中,没有0函数。然而,函数有以下帮助入口:

都是1。ONES(N)是一个包含1的N × N矩阵。ONES(M,N)是一个M × N的1矩阵。ONES(A)与A和所有的one尺寸相同。

当我在1987年第一次开始使用MATLAB(版本3.05a)时,函数的行为0匹配这设计,与明显的区别是矩阵的值为0而不是1的所有元素。

注意这个设计意味着什么。我总是得到一个相同大小的数组一个除非一个是标量。然后我们得到有大小的东西一个通过一个.这意味着如果我们想得到一个标量值0在美国,我们必须不断地进行防御性编程,并询问是否一个是标量,然后创建0 (1),否则创建零(A)。不断。这是代码中混乱和错误的来源,人们在编程时没有意识到行为的不连续。

模糊性导致了MATLAB版本4前后的变化

为了减轻这种麻烦,在MATLAB版本4中,我们不再使用语法0 (A)而是期望输入是非负整数。MATLAB仍然只有二维双数组(带有一个属性,描述何时将值解释为字符)。有了这种设计,就不再需要这种防御性编程了。

MATLAB版本5中N维的扩展

在MATLAB(版本5)中引入高维数组后,我们更改了的输入语法0允许2个非负整数输入n维数组中这样值的向量。虽然能够以这种方式创建高维数组很好,但为非双精度数据类型创建它们很棘手,这是MATLAB发行版中的另一个新特性。

生成另一种类型的零数组的最常见方法是首先创建正确大小的双精度数组,然后将其转换为uint8.这是低效的,首先创建一个使用8倍于所需内存的数组,然后将其转换为uint8数组,具有较小的数据类型。

当然,也有办法解决这个问题。你可以创建一个正确数据类型的标量0,例如,然后将其设置为新创建的数组中的最后一个元素,就像你的4-D数组:

B(m,n,p,q) = uint8(零(1));

有效,但可能有点神秘。

MATLAB R14 (Version 7)中创建特定类零的能力

在MATLAB 7中,我们引入了另一种新的语法0和同伴,允许你指定输出的数据类型,前提是它是内置数据类型之一。以下是相关信息的片段。

X = 0(…,classname) classname restricted to built in types: 'double', 'single', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', or 'uint64'

这显然比创建一个双精度对象数组然后将其隐藏更节省内存。比将新数组的结束元素设置为正确类型的0更简单。

然而,还有一个限制。创建用户定义数据类型的零数组(包括作为我们产品一部分发布的类)仍然很麻烦。2022世界杯八强谁会赢?

MATLAB R2013a(8.1版)最新语法更新

除了以MATLAB版本4以来所有可能的方式创建零数组之外,现在您还可以创建一个与另一个数组类似的零数组,从而省去了查找数组的大小和类型并传递该信息的麻烦。它还允许您创建任何数据类型的数组,内置的或用户定义的。怎么做呢?下面是一种可能的语法选择。

X = 0 (sz1,…,szN,'like',p)

你能利用这些变化吗?

随着时间的推移,你是否能够利用这些变化?你知道他们吗?我很想听听你的想法在这里




MATLAB®R2013a发布


  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。

Baidu
map