两种不同类型的数组

用户名

我对数组的不同类型感到困惑。考虑这两个例子

a = Array{Float64}[]
push!(a,[1, 2])
push!(a,[3, 4])
push!(a,[1 2; 3 4])

b = Array[[1.0, 2.0], [3.0,4.0], [1.0 2.0; 3.0 4.0]]

我不确定如何ab不同。假设我打算对a或中的b每个元素运行一个for循环,并将每个元素乘以2。即,

for i in 1:3 a[i] = a[i]*2 end

for i in 1:3 b[i] = b[i]*2 end

我分别为两条线的运行时间计时,但是它们的速度一样快。ab一样吗?如果是这样,为什么a还要存在呢?它看起来相当复杂,因为会typeof(a)产生“ Array {Array {Array {Float64,N}其中N,1}”。where在这里做什么

BogumiłKamiński

两个ab是矢量,但它们允许不同类型的元件。您可以通过以下方式进行检查:

julia> typeof(a)
Array{Array{Float64,N} where N,1}

julia> typeof(b)
Array{Array,1}

现在Array是具有两个参数的参量类型第一个参数是它允许的元素类型。第二个参数是尺寸。您会看到,在这两种情况下,维都是1,表示ab是向量。您也可以使用以下ndims功能对其进行检查

julia> ndims(a)
1

julia> ndims(b)
1

第一个参数是允许的元素类型。a的情况下,Array{Float64,N} where N而在b公正的情况下Array在解释如何阅读它们之前,请注意可以使用以下eltype函数提取第一个参数

julia> eltype(a)
Array{Float64,N} where N

julia> eltype(b)
Array

您可以看到两者ab允许Array对其进行存储。首先让我解释一下如何阅读Array{Float64, N} where N这意味着a可以存储Float64任何尺寸的数组实际上,您可以用以下较短的方式编写代码,Array{Float64}因为您可以检查以下内容:

julia> (Array{Float64,N} where N) === Array{Float64}
true

原因是,如果不对tail参数施加限制,则可以在语法上删除它。where N部分是对参数的限制。在这种情况下,对第二个参数没有限制。

现在我们可以转向b您会看到它eltype是just Array,因此两个参数都被删除,因此如上所述对它们没有任何限制。因此Array,与Array{T, N} where {T,N}您在此处看到的相同

julia> (Array{T, N} where {T,N}) === Array
true

因此,区别在于a可以存储任何维度的数组,但它们必须具有Float64元素类型,而b可以存储任何维度和任何元素类型的数组。这种区别,在这种情况下,具有如你已经注意到性能没有影响,但将有什么可以存储在冲击ab这里有些例子。

在这种情况下,它们的工作方式与您尝试将Int它们存储在其中的方式相同,但是它们只允许使用数组:

julia> a[1] = 1
ERROR: MethodError: Cannot `convert` an object of type

julia> b[1] = 1
ERROR: MethodError: Cannot `convert` an object of type

但在这里它们有所不同:

julia> a[1] = ["a"]
ERROR: MethodError: Cannot `convert` an object of type String to an object of type Float64

julia> b[1] = ["a"]
1-element Array{String,1}:
 "a"

julia> a
3-element Array{Array{Float64,N} where N,1}:
 [1.0, 2.0]
 [3.0, 4.0]
 [1.0 2.0; 3.0 4.0]

julia> b
3-element Array{Array,1}:
 ["a"]
 [3.0, 4.0]
 [1.0 2.0; 3.0 4.0]

如您所见,您可以存储Stringin的数组b,但是不允许将其存储在中a

另外两个评论(两个主题都比较复杂,因此我省略了详细信息,但只是提示您发生了什么):

  1. 定义数组时,不得指定数组的元素类型。在这种情况下,Julia将自动选择其元素类型:
julia> [[1.0, 2.0], [3.0,4.0], [1.0 2.0; 3.0 4.0]]
3-element Array{Array{Float64,N} where N,1}:
 [1.0, 2.0]
 [3.0, 4.0]
 [1.0 2.0; 3.0 4.0]
  1. 选择数组的元素类型对性能的影响取决于以下事实:

    1. 如果类型是抽象的(可以通过isabstracttype可以通过编译器进行的这种影响类型推断来检查),
    2. 如果是位类型(可以通过isbitstype;进行检查,这会影响存储布局),
    3. 如果元素类型为Union(可以更有效地处理小并集)。

在您的情况下,两种元素类型都是抽象位和非位,因此性能将相同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

断言两种不同类型的枚举是等效的

来自分类Dev

JSON.NET:定义可以容纳两种不同类型对象的C#字段

来自分类Dev

在Django 1.5 / 1.6中设置两种不同类型的用户

来自分类Dev

Opencart:两种不同类型的发票

来自分类Dev

Swift中两种不同类型的nil?

来自分类Dev

如何捕获两种不同类型的错误输入

来自分类Dev

比较两种不同类型的ArrayList以查找公用数据

来自分类Dev

修改其值后,两种不同类型的输出中的歧义?

来自分类Dev

这是在两种不同类型的数组之间进行转换的最佳方法吗?

来自分类Dev

如何在MATLAB中从两种不同类型的目录加载所有文件

来自分类Dev

恰好两种不同类型的扩展方法

来自分类Dev

如何在Swift中为UITableView处理数组中的两种不同类型

来自分类Dev

Elasticsearch-连接两种不同类型的文档

来自分类Dev

从两种不同类型的数组获取公共数据

来自分类Dev

通过TCP发送两种不同类型的数组

来自分类Dev

如何区分两种不同类型的哈希表

来自分类Dev

断言两种不同类型的枚举是等效的

来自分类Dev

这是在两种不同类型的数组之间进行转换的最佳方法吗?

来自分类Dev

在Elasticsearch中搜索具有不同映射的两种不同类型

来自分类Dev

如何给btw数组元素一个空格或一个空格,以显示两种不同类型的数组

来自分类Dev

在C ++函数中返回两种不同类型的两个值

来自分类Dev

两种不同对象类型的多维数组

来自分类Dev

Googlemap JS中两种不同类型的标记

来自分类Dev

如何检测两种不同类型的权限

来自分类Dev

Angular 存在两种不同类型的同名

来自分类Dev

对两种不同类型的 Numpy 数组进行排序

来自分类Dev

这是两种不同类型的枚举吗?

来自分类Dev

两种不同类型的日期比较,Python 3.6

来自分类Dev

是否可以从进入 map/flatMap 的 Observable 返回两种不同类型的类型?

Related 相关文章

  1. 1

    断言两种不同类型的枚举是等效的

  2. 2

    JSON.NET:定义可以容纳两种不同类型对象的C#字段

  3. 3

    在Django 1.5 / 1.6中设置两种不同类型的用户

  4. 4

    Opencart:两种不同类型的发票

  5. 5

    Swift中两种不同类型的nil?

  6. 6

    如何捕获两种不同类型的错误输入

  7. 7

    比较两种不同类型的ArrayList以查找公用数据

  8. 8

    修改其值后,两种不同类型的输出中的歧义?

  9. 9

    这是在两种不同类型的数组之间进行转换的最佳方法吗?

  10. 10

    如何在MATLAB中从两种不同类型的目录加载所有文件

  11. 11

    恰好两种不同类型的扩展方法

  12. 12

    如何在Swift中为UITableView处理数组中的两种不同类型

  13. 13

    Elasticsearch-连接两种不同类型的文档

  14. 14

    从两种不同类型的数组获取公共数据

  15. 15

    通过TCP发送两种不同类型的数组

  16. 16

    如何区分两种不同类型的哈希表

  17. 17

    断言两种不同类型的枚举是等效的

  18. 18

    这是在两种不同类型的数组之间进行转换的最佳方法吗?

  19. 19

    在Elasticsearch中搜索具有不同映射的两种不同类型

  20. 20

    如何给btw数组元素一个空格或一个空格,以显示两种不同类型的数组

  21. 21

    在C ++函数中返回两种不同类型的两个值

  22. 22

    两种不同对象类型的多维数组

  23. 23

    Googlemap JS中两种不同类型的标记

  24. 24

    如何检测两种不同类型的权限

  25. 25

    Angular 存在两种不同类型的同名

  26. 26

    对两种不同类型的 Numpy 数组进行排序

  27. 27

    这是两种不同类型的枚举吗?

  28. 28

    两种不同类型的日期比较,Python 3.6

  29. 29

    是否可以从进入 map/flatMap 的 Observable 返回两种不同类型的类型?

热门标签

归档