首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么[1:2] =数组[1:2]

为什么[1:2] =数组[1:2]
EN

Stack Overflow用户
提问于 2016-10-29 19:04:29
回答 1查看 198关注 0票数 7

我正在学习朱莉娅跟随维基本,但我不明白为什么以下两个命令给出了不同的结果:

代码语言:javascript
运行
复制
julia> [1:2]
1-element Array{UnitRange{Int64},1}:
 1:2

julia> Array[1:2]
1-element Array{Array,1}:
 [1,2]

很抱歉,如果我还没有在维基百科上看到一个解释的话,我只是简单地看了一下,但没有找到。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-29 19:18:44

Typea在元素上运行转换,在范围到数组(collect)之间有一个简单的转换。因此,Array[1:2]1:2转换为数组,然后生成这样的对象数组。这与Float64 641;2;3是Float64数组的原因相同。

前面的这些部分回答了错误的问题。哦..。

a:b不是数组,而是UnitRange。为什么要为A = a:b创建一个数组?它只需两个数字就可以存储它,您基本上可以为任何A[i]免费计算i。使用数组将占用与b-a成正比的内存量,因此,对于较大的数组而言,分配需要大量时间,而UnitRange的分配基本上是免费的。

这类类型在Julia中被称为懒惰迭代器。LinSpace是另一个。另一组有趣的类型是特殊的矩阵类型:为什么要使用多个数组来存储DiagonalUniformScaling运算符充当标识矩阵,同时只存储一个值(它的规模),以提高A-kI的效率。

因为Julia有一个健壮的类型系统,所以没有理由创建所有这些东西数组。相反,您可以使它们成为一种特殊的类型(*+等)。索引就像数组一样,但实际上并非如此。这将使它们占用的内存更少,速度也更快。如果需要数组,只需调用collect(A)full(A)即可。

我意识到你贴了一些更具体的东西。这里的原因是Array[1:2]调用数组的getindex函数。这个getindex函数在Range上有一个特殊的分派,因此它“就像被数组索引了一样”(参见前面的讨论)。这是“特殊大小写”,但实际上,它只需要调度,就像执行数组一样,就像处理其他函数一样。无论A是什么,[A]都会给出一个typeof(A)数组,所以这里没有魔法。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40322616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档