3

我是 APL 的新手,我想在向量中找到元素的位置。例如,如果我创建一个包含 50 个随机数的向量:

lst ←  50 ? 100

假设它在向量中出现 3 次,我如何找到 91 的位置?

谢谢。

4

4 回答 4

4
于 2018-06-16T12:21:08.560 回答
4

我不是专家,但一种简单的方法是只选择⍳ 100相应元素所在的lst元素91

(lst=91)/⍳100
于 2018-06-16T12:13:40.777 回答
1

感谢ngn、Cows_quack 和 Probie。我应该更仔细地阅读 Mastering Dyalog APL,因为它在第 126 页也提到了这一点。所以把所有的答案放在一起:

⍝ 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

所以分解解决方案;(i) (lst = 1) 生成一个布尔向量,其中 true 出现在 int 值 1 存在的地方;(ii) 通过布尔向量压缩 lst 向量在 lst 中创建一个位置为 'true' 的新向量。

如果我的描述不正确,请纠正我?

简化:

使用 'Where' 函数使其更具可读性(尽管前面的方法显示了如何使用数组编程的 APL 思维方式来解决它):

⍸lst=1
2 37          ⍝ Positions 2 and 37

感谢您抽出宝贵的时间!

问候

于 2018-06-16T13:07:55.923 回答
1
于 2018-06-18T15:11:06.247 回答