回答編集履歴
2
test
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
idx = cartesian([np.arange(length) for length in lens])
|
22
22
|
|
23
|
-
offset =
|
23
|
+
offset = lens.cumsum() - lens
|
24
24
|
|
25
25
|
|
26
26
|
|
1
追記
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
コードを整理すればもっといい方法があるかもしれませんが、いかがでしょうか。`itertools.product`より速いと思われます(特に各要素が数値なら)。
|
1
|
+
コードを整理すればもっといい方法があるかもしれませんが、以下の方法でいかがでしょうか。`itertools.product`より速いと思われます(特に各要素が数値なら)。
|
2
2
|
|
3
3
|
|
4
4
|
|
@@ -34,7 +34,7 @@
|
|
34
34
|
|
35
35
|
|
36
36
|
|
37
|
-
動作確認
|
37
|
+
## 動作確認
|
38
38
|
|
39
39
|
|
40
40
|
|
@@ -217,3 +217,67 @@
|
|
217
217
|
# (後略)
|
218
218
|
|
219
219
|
```
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
## 速度比較
|
224
|
+
|
225
|
+
|
226
|
+
|
227
|
+
```python
|
228
|
+
|
229
|
+
In [21]: def df_product_itertools(df_list):
|
230
|
+
|
231
|
+
: lsts = [df.to_numpy().tolist() for df in df_list]
|
232
|
+
|
233
|
+
: new_list = [reduce(add, e) for e in itertools.product(*lsts)]
|
234
|
+
|
235
|
+
: return pd.DataFrame(new_list, columns=np.concatenate(
|
236
|
+
|
237
|
+
: [df.columns.to_numpy() for df in df_list]))
|
238
|
+
|
239
|
+
|
240
|
+
|
241
|
+
In [22]: l_1 = [[1, 2], [3, 4]]
|
242
|
+
|
243
|
+
: l_2 = [[11, 22], [33, 44]]
|
244
|
+
|
245
|
+
: l_3 = [[111, 222], [333, 444]]
|
246
|
+
|
247
|
+
: l_4 = [[1111, 2222], [3333, 4444]]
|
248
|
+
|
249
|
+
: l_5 = [[11111, 22222], [33333, 44444]]
|
250
|
+
|
251
|
+
:
|
252
|
+
|
253
|
+
: df1 = pd.DataFrame(l_1, columns=['A', 'B'])
|
254
|
+
|
255
|
+
: df2 = pd.DataFrame(l_2, columns=['C', 'D'])
|
256
|
+
|
257
|
+
: df3 = pd.DataFrame(l_3, columns=['E', 'F'])
|
258
|
+
|
259
|
+
: df4 = pd.DataFrame(l_4, columns=['G', 'H'])
|
260
|
+
|
261
|
+
: df5 = pd.DataFrame(l_5, columns=['I', 'J'])
|
262
|
+
|
263
|
+
|
264
|
+
|
265
|
+
In [23]: %timeit df_product([df1, df2, df3, df4])
|
266
|
+
|
267
|
+
: %timeit df_product_itertools([df1, df2, df3, df4])
|
268
|
+
|
269
|
+
355 µs ± 18.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
|
270
|
+
|
271
|
+
928 µs ± 16.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
|
272
|
+
|
273
|
+
|
274
|
+
|
275
|
+
In [24]: %timeit df_product([df1, df2, df3, df4, df5])
|
276
|
+
|
277
|
+
: %timeit df_product_itertools([df1, df2, df3, df4, df5])
|
278
|
+
|
279
|
+
378 µs ± 12.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
|
280
|
+
|
281
|
+
1.12 ms ± 17.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
|
282
|
+
|
283
|
+
```
|