2017-10-19 170 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