我是一个APL新手,希望能找到一个向量中元素的位置。例如,如果我创建了一个包含50个随机数的向量:
lst ← 50 ? 100
如何查找向量中3次出现91的位置?
谢谢。
我是一个APL新手,希望能找到一个向量中元素的位置。例如,如果我创建了一个包含50个随机数的向量:
lst ← 50 ? 100
如何查找向量中3次出现91的位置?
谢谢。
我不是专家,但一个简单的方法是仅从⍳ 100
中选择对应于lst
中元素为91
的元素。
(lst=91)/⍳100
≢lst
而不是 ⍳100
会更好,以防 lst
长度改变。 - Adám使用Dyalog 16.0,您可以使用新的单子函数⍸
“Where”。
⍸lst=91
lst=91
会得到一个由0和1组成的向量。对其应用 ⍸
可以获取所有1所在的位置。如果 lst
是一个矩阵,同样适用。
⍝ Generate a list of 100 non-unique random numbers
lst ← ?100⍴100
⍝ How many times does 1, for example, appear in the vector Using the compress function?
+/ (lst = 1) ⍝ Appears twice
2
⍝ Find the locations of 1 in the vector
(lst = 1) / ⍳ ⍴ lst
2 37 ⍝ Positions 2 and 37
⍸lst=1
2 37 ⍝ Positions 2 and 37
感谢您在此事上的时间!
祝好
+/
中的 /
不是压缩函数,而是归约运算符。对于任何函数 F
,F/ a b c d e
等同于 a F b F c F d F e
。 - Probie虽然您的问题已经得到了充分解答,但您可能会对关键运算符⌸
感兴趣。当其派生函数被单调应用时,它接受一个操作数并为参数中的每个元素应用一次。该函数以唯一元素作为左参数,并将其索引列表作为右参数:
lst ← ?100⍴10
{⍺ ⍵}⌸lst
┌──┬──────────────────────────────────────────┐
│3 │1 3 9 28 37 38 55 70 88 │
├──┼──────────────────────────────────────────┤
│10│2 6 13 17 30 59 64 66 71 82 83 96 │
├──┼──────────────────────────────────────────┤
│7 │4 5 12 15 20 52 54 68 74 85 89 91 92 │
├──┼──────────────────────────────────────────┤
│9 │7 11 24 47 53 58 69 86 90 │
├──┼──────────────────────────────────────────┤
│8 │8 14 16 21 43 51 63 67 73 80 │
├──┼──────────────────────────────────────────┤
│2 │10 18 26 27 34 36 48 78 79 87 │
├──┼──────────────────────────────────────────┤
│1 │19 25 31 32 33 42 57 65 75 84 97 98 99 100│
├──┼──────────────────────────────────────────┤
│6 │22 23 45 46 50 60 76 94 │
├──┼──────────────────────────────────────────┤
│5 │29 49 56 61 72 77 93 95 │
├──┼──────────────────────────────────────────┤
│4 │35 39 40 41 44 62 81 │
└──┴──────────────────────────────────────────┘
50?100
从⍳100
(即0...99或1...100,取决于⎕IO
)中随机选择50个不同的整数。91永远不会出现超过一次。你可能想要使用?50⍴100
。 - ngn