📜  在 Julia 中创建父数组的视图 – view()、@view 和 @views 方法(1)

📅  最后修改于: 2023-12-03 14:50:58.469000             🧑  作者: Mango

在 Julia 中创建父数组的视图 - view()、@view 和 @views 方法

在 Julia 中,我们可以使用数组的视图来创建数组的引用,让我们可以对数组进行修改或者进行一些操作,而不用复制或者重复创建数组,从而减少计算资源的浪费。这里我们将介绍 Julia 中创建父数组的视图的三个方法:view()、@view 和 @views。

使用view()方法创建视图

view() 方法是最基本的创建视图的方法。它可以接受一个父数组和一组非负整数,返回一个新的数组,该数组是父数组的某个子集。例如,我们可以定义一个二维数组并创建一个其子数组的视图,如下所示:

a = [1 2 3; 4 5 6; 7 8 9]
b = view(a, 1:2, 1:2)

运行该程序将得到以下输出:

2×2 view(::Array{Int64,2}, 1:2, 1:2) =
 1  2
 4  5

这里,我们创建了一个 2 行 2 列的 b 数组,作为 a 数组左上角的 2 行 2 列的子数组的视图。

使用@view宏创建视图

@view 宏是 Julia 中另一个创建视图的方法。它使用与 view() 相同的语法,但是它返回的是一个按引用传递的视图,而不是一个新的视图数组。例如,我们可以像这样使用 @view 宏:

a = [1 2 3; 4 5 6; 7 8 9]
b = @view a[1:2, 1:2]

这里,我们创建了一个与前面例子中的 b 等价的视图,但是这个视图是按引用传递的。

使用@views宏同时创建多个视图

@views 宏是用于同时创建多个父数组的视图的方法。这个宏可以接受多个数组作为输入,并返回一个元组,其中包含这些数组的视图。

a = [1 2 3; 4 5 6; 7 8 9]
b,c = @views a[:, 1:2], a[:, 2:3]

在这个例子中,我们使用 @views 宏同时创建了两个视图 b 和 c。这些视图均基于 a 数组,并且对它们的修改将反映到原始数组中。

以上是在 Julia 中创建父数组的视图的三个方法:view()、@view 和 @views。使用它们可以减少计算资源的浪费,提高代码的执行效率。