1

Mathematica の位置関数(http://reference.wolfram.com/mathematica/ref/Position.html)のようなものが必要ですが、Qでは長方形行列の私の解決策は次のとおりです。

q) colrow:{sz:count x; $[(count first x) = 1; enlist y; (floor y % sz;  y mod sz)]}
q) position:{flip colrow[x;(where raze x = y)]}

長方形の行列とリストに対しては簡単に機能します。

q) t:(1 -1  1;  / matrix test
     -1  3  4; 
      1 -1  1);

q) pos1:position[t;-1]   / try to find all positions of -1
q) pos1
 0 1
 1 0
 2 1

q) t ./: pos1   / here get items
 -1 -1 -1

q) l:1 0 3 0 2 3 4 1 0  / list test
q) pos2:position[l;0]   / try to find all positions of 0

q) pos2
 1
 3
 8

q) l ./: pos2 / get items
 0 0 0 

これは機能しますが、長方形の行列だけでなく、任意のリストに対してより一般的な解決策があるとよいでしょう。たとえば、上記のコードは次のような引数では正しく機能しません。

position[(1 2 3; 1 2; 1 2 1 4); 1]

誰かがそのための一般的な解決策を持っているかもしれませんか?

4

2 に答える 2