Julia机器学习核心编程.6
一些常规语言都有的东西
提一嘴类型转换,指更改变量的类型,但是维持值不变的操作
数组是对象的可索引集合,例如整数、浮点数和布尔值,它们被存储在多维网格中。Julia中的数组可以包含任意类型的值。在Julia中本身就存在数组这个概念。
在大多数编程语言中,数组的下标都是从0开始的。但是在Julia中,数组的下标是从1开始的。这个特性我觉得在某些时候更符合直觉.日常说256级色域,你问ta,这么个数,大概率会说,1-256.but这个东西不对,应该是0-255,其实是一种反直觉的东西,至于设计背后的终极理念,如果我可以和语言的设计者聊天,可能会知道吧.MIT哦......我可以去吗?
代码使用rand函数创建了一个数组,该函数接收两个值,其中第一个值是范围,用“:”表示;第二个值是一个数。本例创建了一个具有6个元素的数组。
前面我们讨论的数组元素的类型是相同的。
创建具有不同类型元素的数组
如下代码创建了一个具有不同类型元素的数组,但是一些元素会自动提升它的类型。
在这段代码中,我们使用Float和Int数据来创建一个数组。在Julia中创建数组时会将Int类型转换为Float类型。一般来说,Julia会尝试使用promote()函数来提升类型。如果不能提升,数组将会变成Any类型。
代码在数组中输入了Int和字符串类型的元素,我们知道这两个元素是不能提升类型的,所以该数组为Any类型。
Julia中的列表解析式
通过列表推导创建数组更加容易,接下来我们就创建一个数组,并用2的幂来填充数组。
使用列表解析式创建
对不住了,我报错了
创建空白数组,用push!函数添加元素
append!吧一个数组放另一个数组里面
这还是报错,我一会儿看看文档去
是不是有MATLAB内味儿了!!!!!
转置一下
这个转置函数可能更好一点的选择
常见的操作
意料之中的报错,不知道的去看看线性代数
懂了吧,点到为止
这个把上面的报错也写进来了
.是一个特殊的运算符
多维数组的创建
取数
整形操作
DataFrame是具有标记列的数据结构,可以单独使用不同的数据类型。就像SQL表或电子表格一样,它有两个维度。DataFrame是统计分析推荐的数据结构。Julia提供了一个名为DataFrames的包,它具有使用DataFrames所需的所有功能。Julia的DataFrames包提供了三种数据类型。
· NA:Julia中的缺失值由特定数据类型NA表示。
· DataArray:标准Julia库中定义的数组类型。虽然它具有很多功能,但并未提供任何特定的数据分析功能。而DataFrames包中的DataArray类型提供了这些功能(例如,可以在数组中存储一些缺失值)。
· DataFrame:这是一个二维数据结构,其提供了很多功能来表示和分析数据。
DataFrames中的NA数据类型
在实际生活中,我们会遇到无值的数据。虽然Julia中的数组无法存储这种类型的值,但DataFrames包中提供了这种数据类型,即NA数据类型。假设有一个带有浮点数的数据集:
julia> x = [1.1, 2.2, 3.3, 4.4, 5.5, 6.6]
这将创建一个具有6个元素的数组{Float64,1}。
现在,假设此数据集在位置x[1]处有缺失值。这意味着该数据没有意义,而不是1.1。我们不能用Julia中的数组类型来表示。当尝试分配NA值时,将发生错误,我们无法将NA值添加到数组中。
01 julia> x[1] = NA
02 Error: UndefVarError: NA not defined
03 while loading In[2], in expression starting on line 1
如果要将数据加载到具有NA值的数组中,则需要使用DataArrays包下的DataArray类型。
DataArrays的使用
01 julia> using DataArrays
02 julia> x = DataArray([1.1, 2.2, 3.3, 4.4, 5.5, 6.6])
这将创建一个具有6个元素的数组DataArrays.DataArray{Float64,1}。下面的代码将使用NA值进行测试。
NA值测试
以下代码简单测试了NA的性质。
01 julia> x[1] = NA
02 NA
03 julia> x
04 6-element DataArrays.DataArray{Float64,1}:
05 NA
06 2.2
07 3.3
08 4.4
09 5.5
10 6.6
代码01行将NA赋值给x[1],因此使用DataArray可以处理丢失的数据。NA并不总是影响应用于特定数据集的函数。因此,不涉及NA值或不受其影响的方法可以应用于数据集;如果涉及NA值,那么DataArray将给出NA作为结果。在下面的代码中,我们使用了mean()函数和true||x。mean()函数不起作用,因为它涉及NA值;而true||x则按预期工作。
01 julia> true || x
02 true
03 julia> true && x[1]
04 NA
05 julia> mean(x)
06 NA
07 julia> mean(x[2:6])
08 4.4
可以看到,使用mean()函数时返回的值为NA。代码07行不涉及NA值,因此返回正常的数值。