Julia阵列范围访问

时间:2017-10-19 13:00:52

标签: julia

创建像d = [1 2 3 4 5 6 7 8 9]这样的数组会创建一个维度为2的1x9数组(旁边问题:为什么有两个维度?)。

这可以用作矩阵和向量乘法中的行向量。 访问d[2:5]范围不会返回1x4数组中排列的值。结果基本上是维度为4x1的列向量。 (在Matlab / Octave中,访问矢量范围时会保持尺寸。)

但是,行向量与d[:,2:5]一起返回(但不包含d[1,2:5])。

这对我来说似乎很奇怪,因为这意味着我总是要注意行/列向量。 那么这真的是预期用途还是我走错了路? 此外,有人可以解释为什么d[:,2:5]有效,但d[1,2:5]没有?

1 个答案:

答案 0 :(得分:1)

编辑:复制@ Gnimuc的评论,因为我觉得这很重要。

  

从技术上讲,上面提到的“行向量”实际上就是这样   一个1 -row Matrix又名1x4 Array。在朱莉娅,我们有一个RowVector   类型(例如d[2:5].',我们认真对待矢量转置:   [1,2,3].' * [1,2,3] #=> 14[1 2 3] * [1,2,3] #=> [14] (1-element array).与那些“草率”的语言不同,你必须这样做   在Julia认真地了解所有这些;)

d = [1 2 3 4 5 6 7 8 9] 
  

创建一个维度2的1x9数组(侧面问题:为什么是两个维度?)。

因为这是创建一个二维数组的语法吗?使用d = [1, 2, 3]d = [1; 2; 3]创建一维数组(或列Vector)。

  

以d [:,2:5]返回行向量(但不包含d [1,2:5])。

     

这对我来说似乎很奇怪,因为这意味着我总是要注意   行/列向量。这真的是预期的用途,还是我的用途   错路?此外,有人可以解释为什么d [:,2:5]有效,但d [1,2:5]   不是吗?

使用整数进行索引会导致维度丢失,而使用Range(或任何AbstractVector)进行索引不会丢弃它。关于这个决定的讨论有很多,我不会在这里重复,但在其他地方看看here

就“我总是要注意行/列向量”而言,这是因为无论你有行向量还是向量都意味着不同的东西,所以自然应该知道它。例如,如果没有差异,那么区分以下是不可能的:

julia> [1, 2, 3] .* [ 1 2 3 ]
3×3 Array{Int64,2}:
 1  2  3
 2  4  6
 3  6  9

julia> [1, 2, 3] .* [1, 2, 3]
3-element Array{Int64,1}:
 1
 4
 9

希望这在某种程度上有所帮助......