回答編集履歴
3
typo
test
CHANGED
@@ -55,7 +55,7 @@
|
|
55
55
|
|
56
56
|
と実行時間が逆転します。これはコピー有無の差ですね。
|
57
57
|
|
58
|
-
`@view a[in.(a.a, [testList]), :]` : 4.746 ms
|
58
|
+
`@benchmark @view a[in.(a.a, [testList]), :]` : 4.746 ms
|
59
59
|
|
60
60
|
なので,これが一番速そうです。なお,蛇足ですが
|
61
61
|
|
2
思いついてやってみたことを再追記
test
CHANGED
@@ -38,3 +38,28 @@
|
|
38
38
|
|
39
39
|
結果はDataFrameではなくSubDataFrameになるので,大元のDataFrameを変更すると変になったりするので,少し注意が必要かもしれません。
|
40
40
|
|
41
|
+
### 再追記
|
42
|
+
|
43
|
+
なお,テストについては,実際のDataFrameと同じ12列でやった方がいいと思います。
|
44
|
+
例えば次のように12列のデータフレームを設定した場合,
|
45
|
+
|
46
|
+
```julia
|
47
|
+
a = DataFrame(
|
48
|
+
NamedTuple(map(x -> x => rand(1:10, 1000000), Symbol.('a':'l')))
|
49
|
+
)
|
50
|
+
```
|
51
|
+
手元の環境だと
|
52
|
+
|
53
|
+
`@benchmark a[in.(a.a, [testList]), :]` : 12.929 ms
|
54
|
+
`@benchmark filter(:a => in($testList2), $a, view = true)` : 9.107 ms
|
55
|
+
|
56
|
+
と実行時間が逆転します。これはコピー有無の差ですね。
|
57
|
+
|
58
|
+
`@view a[in.(a.a, [testList]), :]` : 4.746 ms
|
59
|
+
|
60
|
+
なので,これが一番速そうです。なお,蛇足ですが
|
61
|
+
|
62
|
+
`df = @view a[in.(a.a, [testList]), :]`
|
63
|
+
|
64
|
+
のような感じで使います。
|
65
|
+
|
1
@viewで得られる結果の型が元のソースと違う旨を追記
test
CHANGED
@@ -34,3 +34,7 @@
|
|
34
34
|
Memory estimate: 9.27 MiB, allocs estimate: 23.
|
35
35
|
```
|
36
36
|
|
37
|
+
### 追記
|
38
|
+
|
39
|
+
結果はDataFrameではなくSubDataFrameになるので,大元のDataFrameを変更すると変になったりするので,少し注意が必要かもしれません。
|
40
|
+
|