2016-09-25 29 views
5

比方說,我們有陣記者:具體座標值

0 1 2 3 4 5 8 7 8 9 

。它有值8兩個指標:

(i.10) ([#~8={) 0 1 2 3 4 5 8 7 8 9 
6 8 

有什麼短的方式來得到這樣的結果?可能是一些內置的動詞。

但更重要的。什麼更高的尺寸? 比方說,我們有矩陣5x4的

1 2 3 4 5 
2 3 4 5 6 
3 4 5 6 7 
4 5 6 7 8 

我想找出什麼是6
我想結果和價值座標,(有三個座標):

4 1 
3 2 
2 3 

這是相當基本任務,我認爲它應該存在一些簡單的解決方案。

三維相同嗎?

謝謝

回答

3

動詞indices I.幾乎沒有工作。

當你有一個簡單的列表,I.的使用很簡單:

I. 8 = 0 1 2 3 4 5 8 7 8 9 
6 8 

對於高階矩陣可以用antibase #:配對獲得座標基地$ matrix。例如:

]a =: 4 5 $ 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 
1 2 3 4 5 
2 3 4 5 6 
3 4 5 6 7 
4 5 6 7 8 

I. 6 = ,a 
9 13 17 

($a) #: 9 13 17 
1 4 
2 3 
3 2 

同樣,對於任何數量的維度:扁平化(,),比較(=),得到指數(I.)和轉換座標(($a)&#:):

]coords =: ($a) #: I. 5 = , a =: ? 5 6 7 $ 10 
0 0 2 
0 2 1 
0 2 3 
... 
(<"1 coords) { a 
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 

順便說一句,你可以寫I. x = y作爲x ([email protected]:=) y以獲得額外的性能。它是用於special code

指數其中X Fý

4
使用

陣列Sparse功能($.)提供了非常快速和貧的解決方案,也適用於多種尺寸。

]a=: 5 ]\ 1 + i. 8 
1 2 3 4 5 
2 3 4 5 6 
3 4 5 6 7 
4 5 6 7 8 
    6 = a 
0 0 0 0 0 
0 0 0 0 1 
0 0 0 1 0 
0 0 1 0 0 
    4 $. $. 6 = a 
1 4 
2 3 
3 2 

心照不宣:

getCoords=: 4 $. $. 
    getCoords 6 = a ,: a 
0 1 4 
0 2 3 
0 3 2 
1 1 4 
1 2 3 
1 3 2 
+0

以前從沒注意到。很有意思。在'1e5 x 1e5'整數矩陣中,'$ .'約快3倍,並使用1/10的空間。 – Eelvex