单元格数组是一种抽象数据类型,带有索引数据容器,称为单元格,其中每个单元格可以包含任何类型的数据。通常在Matlab中使用它来存储数据。
来到朱莉娅,朱莉娅的神奇之处之一就是它的类型系统。这是一种严格类型的语言。在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类型的数组,看看它是从常规数组到单元数组的转换!
# 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)
输出:
当我们尝试在Integer类型的Array中推送浮点值时,上面的代码会产生错误。这表明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")
输出:
这会将常规数组转换为保存异类数据类型的值的单元数组。
2D阵列的单元阵列:
# 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数组一样。它们可用于各种应用程序,如DataFrames,Tuple等的表示形式。
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中数据类型的信息阵列丢失。