こちらのコードのresのような、タプルの配列をfor文の中で結合して出来るnumpyの配列があります。(実際のコードから変数名や内容などをシンプル化しています。)
これを良く見てみると、arr_2の長さの分だけforループが行われ、その中で配列のextendが行われるため、arr_2が長くなってくると処理速度が極端に重くなることがわかりました。
これを配列の作り方などを上手くやることで、高速に処理することはできないでしょうか?
※forループの中のarr_1[4]の4のようなインデックスは、18個固定で数列のような規則性はありません。
Python
1# -*- coding: utf-8 -*- 2import numpy as np 3 4arr_1 = np.array([[0, 0, 1], [0, 0.5, -1], [-1, 0, -1], [0, -0.5, -1], [1, 0, -1]]) 5arr_2 = np.array([[0, 1, 2], [0, 1, 2]]) 6 7all_arr = [] 8for p in arr_2: 9 all_arr = [ 10 (arr_1[0], p), (arr_1[1], p), (arr_1[2], p), 11 (arr_1[0], p), (arr_1[1], p), (arr_1[4], p), 12 (arr_1[0], p), (arr_1[2], p), (arr_1[3], p), 13 (arr_1[0], p), (arr_1[3], p), (arr_1[4], p), 14 (arr_1[1], p), (arr_1[2], p), (arr_1[4], p), 15 (arr_1[2], p), (arr_1[3], p), (arr_1[4], p)] 16 all_arr.extend(all_arr) 17 18 19vtype = [('type_a', np.float32, 3), ('type_b', np.float32, 3)] 20res = np.array(all_arr, dtype=vtype) 21 22print(res)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/03 01:26