Julia阵列范围访问

Julia阵列范围访问,julia,Julia,创建一个数组,如d=[1 2 3 4 5 6 7 8 9]创建一个1x9维度2的数组(附带问题:为什么是两个维度?) 这可以用作矩阵和向量乘法中的行向量。 访问d[2:5]范围不会返回按1x4数组排列的值。结果基本上是一个维度为4x1的列向量。 (在Matlab/Octave中,当访问向量范围时,尺寸保持不变。) 但是,行向量是用d[:,2:5]返回的(但不是用d[1,2:5]) 这对我来说似乎很奇怪,因为这意味着我必须始终注意行/列向量。 那么这真的是预期用途还是我走错了路? 另外,有人能解释

创建一个数组,如
d=[1 2 3 4 5 6 7 8 9]
创建一个
1x9
维度2的数组(附带问题:为什么是两个维度?)

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

但是,行向量是用
d[:,2:5]
返回的(但不是用
d[1,2:5]


这对我来说似乎很奇怪,因为这意味着我必须始终注意行/列向量。 那么这真的是预期用途还是我走错了路?
另外,有人能解释为什么
d[:,2:5]
有效,而
d[1,2:5]
无效吗?

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

从技术上讲,您上面提到的“行向量”实际上是 a
1行矩阵
aka
1x4数组
。在Julia中,我们确实有一个
行向量
类型(例如,
d[2:5])。
我们认真对待向量转置:
[1,2,3].*[1,2,3]#=>14
但是
[1,2,3]*[1,2,3]#=>14]
(单元素数组)。
与那些“草率”语言不同,您必须 在朱莉娅身上认真意识到所有这些;)


创建维度2的1x9数组(附带问题:为什么是二维?)

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


行向量使用d[:,2:5](但不使用d[1,2:5])返回

这对我来说似乎很奇怪,因为这意味着我必须时刻意识到 行/列向量。那么,这真的是预期用途,还是我在 走错了路?还有,有人能解释为什么d[:,2:5]有效,而d[1,2:5] 不是吗

使用整数进行索引会导致维度的删除,而使用范围(或任何抽象向量)进行索引则不会删除维度。在做出这个决定的时候,有很多关于这个决定的讨论,我在这里不再重复,而是看看其他地方


就“我必须始终注意行/列向量”而言,这是因为无论是行向量还是列向量都意味着不同的东西,所以人们自然应该注意它。例如,如果没有差异,则无法区分以下内容:

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

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

“我必须始终注意行/列向量”我认为这是预期的行为
d=[1 2 3 4 5 6 7 8 9]
有两个维度,因为在多个“列”上展开的所有内容都有第二个维度,即使行只有一个。仅供参考,在一篇文章中提出多个问题通常是不建议的。从技术上讲,“行向量”您上面提到的实际上是一个
1行矩阵
aka
1x4数组
。在Julia中,我们确实有一个
行向量
类型(例如
d[2:5]。
和我们:
[1,2,3]。*[1,2,3]#=>14
但是
[1,2,3]*[1,2,3]#=>14](1元素数组)
。与那些“草率”语言不同,在Julia中,你必须认真了解所有这些;)谢谢你和上面的评论。这(以及相关讨论)确实对我有所帮助。我显然期望过多的倍频程/matlab行为:)
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