如何在APL语言中找到满足两个条件的矩阵第一行的索引?
How to find the index of the first row of a matrix that satisfies two conditions in APL Language?
学习如何使用 APL 语言的问题还有一个。
假设你有一个数组,例如:
c1
c2
c3
c4
c5
c6
3
123
0
4
5
6
3
134
0
2
3
4
3
231
180
1
2
5
4
121
0
3
2
4
4
124
120
4
6
3
4
222
222
5
3
5
那么,如何找出哪一行在第 1 列中的值为 4 而在第 3 列中的值大于 0?
预期的答案是第 5 行,在刚好 5
当你想进行这样的“查询”时,想想布尔掩码。
table ← 6 6⍴3 123 0 4 5 6 3 134 0 2 3 4 3 231 180 1 2 5 4 121 0 3 2 4 4 124 120 4 6 3 4 222 222 5
让我们提取第一列:
table[;1]
3 3 3 4 4 4
并指明哪些元素的值为 4:
table[;1] = 4
0 0 0 1 1 1
同样,我们可以指出第3列的哪些元素的值大于0:
table[;3] > 0
0 0 1 0 1 1
它们的交集(逻辑与)表示满足您条件的所有行:
(table[;1] = 4) ∧ (table[;3] > 0)
0 0 0 0 1 1
第一个1的索引是满足您条件的第一行的行号:
((table[;1] = 4) ∧ (table[;3] > 0)) ⍳ 1
5
或者,我们可以使用最终掩码过滤 table 并获取满足您条件的所有行:
((table[;1] = 4) ∧ (table[;3] > 0)) ⌿ table
4 124 120 4 6 3
4 222 222 5 3 5
或者我们可以生成所有行号:
⍳ 1 ↑ ⍴ table
1 2 3 4 5 6
然后使用我们的布尔掩码对其进行过滤,找到满足您条件的所有行的行号:
((table[;1] = 4) ∧ (table[;3] > 0)) ⌿ ⍳ 1 ↑ ⍴ table
5 6
学习如何使用 APL 语言的问题还有一个。 假设你有一个数组,例如:
c1 | c2 | c3 | c4 | c5 | c6 |
---|---|---|---|---|---|
3 | 123 | 0 | 4 | 5 | 6 |
3 | 134 | 0 | 2 | 3 | 4 |
3 | 231 | 180 | 1 | 2 | 5 |
4 | 121 | 0 | 3 | 2 | 4 |
4 | 124 | 120 | 4 | 6 | 3 |
4 | 222 | 222 | 5 | 3 | 5 |
那么,如何找出哪一行在第 1 列中的值为 4 而在第 3 列中的值大于 0?
预期的答案是第 5 行,在刚好 5
当你想进行这样的“查询”时,想想布尔掩码。
table ← 6 6⍴3 123 0 4 5 6 3 134 0 2 3 4 3 231 180 1 2 5 4 121 0 3 2 4 4 124 120 4 6 3 4 222 222 5
让我们提取第一列:
table[;1]
3 3 3 4 4 4
并指明哪些元素的值为 4:
table[;1] = 4
0 0 0 1 1 1
同样,我们可以指出第3列的哪些元素的值大于0:
table[;3] > 0
0 0 1 0 1 1
它们的交集(逻辑与)表示满足您条件的所有行:
(table[;1] = 4) ∧ (table[;3] > 0)
0 0 0 0 1 1
第一个1的索引是满足您条件的第一行的行号:
((table[;1] = 4) ∧ (table[;3] > 0)) ⍳ 1
5
或者,我们可以使用最终掩码过滤 table 并获取满足您条件的所有行:
((table[;1] = 4) ∧ (table[;3] > 0)) ⌿ table
4 124 120 4 6 3
4 222 222 5 3 5
或者我们可以生成所有行号:
⍳ 1 ↑ ⍴ table
1 2 3 4 5 6
然后使用我们的布尔掩码对其进行过滤,找到满足您条件的所有行的行号:
((table[;1] = 4) ∧ (table[;3] > 0)) ⌿ ⍳ 1 ↑ ⍴ table
5 6