vector二维数组初始化_我爱Julia之入门-042(数组)

数组

与大多数技术计算语言一样,Julia 提供原生的数组实现。 大多数技术计算语言非常重视其数组实现,但需要付出使用其它容器的代价。Julia 用同样的方式来处理数组。就像和其它用 Julia 写的代码一样,Julia 的数组库几乎完全是用 Julia 自身实现的,它的性能源自编译器。这样一来,用户就可以通过继承 AbstractArray 的方式来创建自定义数组类型。 实现自定义数组类型的更多详细信息,请参阅manual section on the AbstractArray interface。

数组是存储在多维网格中对象的集合。在最一般的情况下, 数组中的对象可能是 Any 类型。 对于大多数计算上的需求,数组中对象的类型应该更加具体,例如 Float64 或 Int32。

一般来说,与许多其他科学计算语言不同,Julia 不希望为了性能而以向量化的方式编写程序。Julia 的编译器使用类型推断,并为标量数组索引生成优化的代码,从而能够令用户方便地编写可读性良好的程序,而不牺牲性能,并且时常会减少内存使用。

在 Julia 中,所有函数的参数都是 passed by sharing。一些科学计算语言用传值的方式传递数组,尽管这样做可以防止数组在被调函数中被意外地篡改,但这也会导致不必要的数组拷贝。通常,以一个 ! 结尾的函数名表示它会对自己的一个或者多个参数的值进行修改或者销毁(例如,sort 和 sort!)。被调函数必须进行显式拷贝,以确保它们不会无意中修改输入参数。很多 “non-mutating” 函数在实现的时候,都会先进行显式拷贝,然后调用一个以 ! 结尾的同名函数,最后返回之前拷贝的副本。

创建数组

在 Julia 中可以定义任意维度的数组。常见的数组有两种结构:一维和二维。其中一维数组又称为向量,分为行向量和列向量两种,在 Julia 中默认为列向量;二维数组即矩阵,第一维是行,第二维是列。无论是哪一种结构,每一维的大小与长度均可以在定义时指定,也可以定义后动态调整。

我们可以通过构造方法创建数组。

Array{T,N}(undef,dims)

其中, N 是维度大小, T 限定了元素类型, dims 用于指定各维阶数,可以是元组或一系列整形值,但元组长度或除数实参的个数需与 N 一致。也可以省略维度参数。参数中出现的 undef 行将于 UndifInitializer() 函数;是用来说明数组处于尚未初始化状态的单例类型。另外,为了使用方便,可以使用 Vector 类型指代一维数组,用 Matrix 类型指代二维数组。

527aaa2e16cec77a6f0904b0ab03098f.png
e71a91df3fce7f6908a57af106258cfa.png

事实上,我们可以使用方括号 [] ,直接中方括号中罗列出所有的元素值。在这种罗列方式中, Julia 会自动根据其中所有元素的类型,进行必要的类型转化与提升,然后以统一的类型创建 Array 对象。不过,使用空格分离各个元素而创建的是行向量,即第一维的除数为 1 的二维矩阵。或者说,以空格字符罗列出的数值或变量均作为同一行的元素处理。如果我们要创建列向量,则需要使用逗号或分号来分隔各个元素。

858a93a79f2526fb7f578aa140fc028a.png

但逗号与分号是不能混用的。行向量实质上是二维数组,只不过是第一维的阶数为 1 而已,而列向量才是名副其实的一维数组。这从对象描述的维度数也能够看出来。若要创建二维数组,将空格与分号综合使用即可。

66ac46e1bfcdfedf19475a3b7f7a8cfb.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值