创建像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]
没有?
答案 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
希望这在某种程度上有所帮助......