元胞数组是一种带有索引数据容器的抽象数据类型,称为元胞,其中每个元胞可以包含任何类型的数据。它通常在 Matlab 中用于存储数据。
谈到 Julia,Julia 的神奇之处之一就是它的类型系统。它是一种严格类型的语言。在 Julia 中,数组可以包含同构[1, 2, 3]或异构类型[1, 2.5, “3”] 的值。默认情况下,Julia 会尝试将值提升为通用的具体类型。如果 Julia 不能提升包含的类型,则结果数组将是抽象类型Any 。
例子:
# Creating an Array of type Int
[1, 2, 3]
# Creating an Array of type Float
[1, 2.5, 3]
# Creating an Array of type Any
[1, 2.3, "3"]
输出:
所以可以说Array{Any}等价于 Matlab 元胞数组。它可以保存不同数据类型的元素。
从常规数组创建元胞数组
可以使用 Julia 中的一些预定义方法使用常规数组创建元胞数组。
让我们创建一个Int类型的Array并查看它从常规Array到Cell Array的转换!
# Creating an Array of type Int
a = [1, 2, 3]
# push an Int into the Array
push!(a, 5)
# So the type Int is retained
# Push a Float value into the Array
push!(a, 5.2)
输出:
当我们尝试在整数类型数组中推送浮点值时,上面的代码会产生错误。这表明 Julia 是严格类型的,不允许推送任何其他数据类型的元素。
更改数组的数据类型:默认情况下,Julia 不会更改数组的类型,因此它不允许在数组中推送不同类型的值。这可以通过使用外部包来避免。
例子:
# A special package to allow extended operations with push!()
# Install it by typing "add BangBang"
using BangBang
# Creating an Array of type Int
a = [1, 2, 3]
# push an Int into the Array
push!(a, 5)
# Let's try to push the Float value now
push!!(a, 5.2)
输出:
上面的代码将Array转换为Float64,类似的也可以用来转换为字符串数组等。
例子:
using BangBang
# Creating an Array of type Int
a = [1, 2, 3]
# push an Int into the Array
push!(a, 5)
# Pushing the Float value
push!!(a, 5.2)
# Let's try to store a different data type now
push!!(a, "GeeksForGeeks")
输出:
这会将常规数组转换为包含异构数据类型值的元胞数组。
二维数组的元胞数组:
# Create a 2x2 Array of type Int
[1 2 ; 3 4]
# Create a 2x2 Array of type Float
[1 2 ; 3 4.2]
# Create a 2x2 Cell Array, of type Any
[1 2 ; 3 "foo"]
输出:
3D 数组的元胞数组:
# Create a 2x2x2 Array of type Int
cat([1 2; 3 4], [5 6; 7 8], dims=3)
# Create a 2x2x2 Cell Array, of type Any
cat([1 "foo"; 3.2 4], [5 "baz"; 7 8], dims=3)
输出:
向元胞数组添加行
可以使用push!()函数将其他行添加到元胞数组的末尾。
# Create 3 element Cell Array,
# that contains sub-arrays of type Any
c = [[10 20 "GeeksForGeeks"], [40.0], [50 60]]
# push a row Cell Array, of type Any
c = push!(c, [1 2 10])
输出:
在元胞数组中存储元胞数组:
# Create two, 3 element Cell Arrays i and j
i = [2, 3.0, "GeeksForGeeks"]
j = [2.3, 3.3, "CellArrays"]
# Create a 3x2 Array
IJ = [i j]
输出:
元胞数组的使用
元胞数组就像常规的 Julia 数组。它们用于各种应用程序,作为数据帧、元组等的表示。
Julia 中的元胞数组也用于存储函数的输入参数。
# Create two Arrays
i = [2, 3, 4]
j = [2.3, 3.3, 4.3]
# A function that uses values
# from the above two arrays
function FOO(i, j)
a = i + j
end
# Calling the function
FOO(i, j)
输出:
单元阵列的优点:
- 它们允许更大的灵活性来表示数据。
- 它们不是为不同的类型创建不同的数组,而是提供一种节省空间的方式来将所有类型存储在一个数组中。
- 它们提供了一种独特的数据类型“ Any ”,它允许各种数据类型。
元胞阵列的缺点:
- 他们很慢。 Julia 是一种严格类型的语言(意味着类型是预定义的)
- 我们丢失了有关数据的信息,例如:当我们将一个String值推入Float数组以将其转换为 Cell Array 时,它从Array{Float64 }类型变为Array{Any}类型,因此有关 Cell 中数据类型的信息阵列丢失。
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live