2017-10-19 173 views
0

创建一个像d = [1 2 3 4 5 6 7 8 9]这样的数组创建了一个尺寸为2的数组(范围问题:为什么是两个维度?)。Julia数组范围访问

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

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

这对我来说似乎很奇怪,因为这意味着我总是必须知道行/列向量。 那么这是真正的预期用途还是我在错误的道路上? 另外,有人可以解释为什么d[:,2:5]工程,但d[1,2:5]不?

+0

“我一直都知道行/列向量”我认为这是预期的行为。 'd = [1 2 3 4 5 6 7 8 9]'有两个维度,因为在多个“列”上展开的所有东西都有第二维,即使该行只有一个维度。 – Antonello

+0

通常不建议在FY中询问多个问题。 –

+2

从技术上讲,上面提到的“行向量”实际上是一个“1行矩阵”,也就是1x4阵列。在Julia中,我们有一个'RowVector'类型(例如'd [2:5]。'',我们[认真考虑矢量转置](https://github.com/JuliaLang/julia/issues/4774):' [1,2,3]。'* [1,2,3]#=> 14'但是[1 2 3] * [1,2,3]#=> [14](1元素数组)与那些“马虎”的语言不同,你必须在Julia中认真对待所有这些;) – Gnimuc

回答

1

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

从技术上说,你上面提到的“行向量”,实际上是一个 又名1 -row Matrix1x4 Array。在朱莉娅,我们确实有一个RowVector 类型(例如d[2:5].',我们采取矢量调换严重: [1,2,3].' * [1,2,3] #=> 14[1 2 3] * [1,2,3] #=> [14] (1-element array).不像那些“不拘小节”的语言,你必须要 认真了解所有这些在朱莉娅的;)


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

创建尺寸2的1X9阵列(侧问题:为什么两个维度)。

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


行向量被返回与d [:,2:5](但不与d [1,2:5])。

这对我来说似乎很奇怪,因为这意味着我总是必须知道 行/列向量。那么,这是真正的预期用途还是我在 错误的路径?另外,有人可以解释为什么d [:,2:5]有效,但d [1,2:5] 不会?

使用Integer索引会导致维度下降,而使用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 

希望这是在某些方面有帮助...

+0

谢谢你和上面的意见。这(和相关的讨论)的确帮助了我。我显然期望太多倍频程/ matlab行为:) – nils