索引访问
在 Julia 中,对数组的访问同样有多种方法。首先,我们先介绍 Julia 数组的两个非常重要的特点:
- Julia 的索引起始下标是 1 而不是 0 。这是 Julia 与其他许多语言一同的地方:指向 Julia 数组的第一个元素的索引值不是 0 而是 1(1-based)。
- Julia 数组中的数据是按列存储的。
笛卡尔索引
笛卡尔索引(Cartesian Indexing)是最为常见的访问数组的方式:在数组名称之后的方括号中以逗号列出各维度上的索引下标值,即对某个 N 维数组 A ,以某个元素在各维度上的具体位置组合的形式 A[d1,d2,...,dn] 获取其值。
![43a4b8b6993d1b08cb68374e76b8a870.png](https://img-blog.csdnimg.cn/img_convert/43a4b8b6993d1b08cb68374e76b8a870.png)
这种索引方式对前面所介绍的 Range 对象同样适用。
![5e58e9911724e942e1d272141b80e736.png](https://img-blog.csdnimg.cn/img_convert/5e58e9911724e942e1d272141b80e736.png)
另外,如果给定的索引下标超出了维度的阶数,则会导致越界错误。可以通过数组属性函数 size() 先取得各维度阶数,再以合理的下标值对数组进行访问。
![4c61eb527a4bd496bdf00b91f68a8741.png](https://img-blog.csdnimg.cn/img_convert/4c61eb527a4bd496bdf00b91f68a8741.png)
end 操作
为了操作的便利,尤其是对尾元素这样的边界值的访问,Julia 提供了 end 关键字,能够自动取得对应维度上的尾元素索引值。
![0070ceb1510d8865ff29803f8b57a305.png](https://img-blog.csdnimg.cn/img_convert/0070ceb1510d8865ff29803f8b57a305.png)
而且在索引表达式中还能够以 end 为基础,通过适当的计算实现对数集的灵活访问。
![cc62918672518312489b4f5b80226dbb.png](https://img-blog.csdnimg.cn/img_convert/cc62918672518312489b4f5b80226dbb.png)
赋值修改
在获得元素后,可以对其修改。但不能将一个无法转换到数组歹毒类型的值赋予某个元素。
![468cf4eaa8ad4abc35cf6dbbc0eb7f2a.png](https://img-blog.csdnimg.cn/img_convert/468cf4eaa8ad4abc35cf6dbbc0eb7f2a.png)
从上图中第二个赋值可以看出,Julia 赋值后会返回被赋予的值 1.0 ,但存入数组时,由于 1.0 可以被转换成 Int64 类型,所以会存入 Int64 类型的整数 1 。而如果赋值不能转换成数组元素类型,则会报错。
在 Julia 中,1.0 可以被转换成整型,但 1.1 则不能。
![1fc3d23d5fb84bc2a0104d88a988dda6.png](https://img-blog.csdnimg.cn/img_convert/1fc3d23d5fb84bc2a0104d88a988dda6.png)