J:具有特定值的坐标
J: Coordinates with specific value
假设我们有数组
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
这是非常基本的任务,我认为应该存在一些简单的解决方案。
三个维度一样吗?
谢谢
动词 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 (I.@:=) y
以获得额外的性能。
special code
indices where x f y
使用 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 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
这是非常基本的任务,我认为应该存在一些简单的解决方案。
三个维度一样吗?
谢谢
动词 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 (I.@:=) y
以获得额外的性能。
indices where x f y
使用 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