私は次のnumpy配列を持っています
import numpy as np
X = np.array([[5.], [4.], [3.], [2.], [1.]])
最初に[6.]
を挿入します。私はもう試した:
X = X.insert(X, 0)
xに挿入するにはどうすればよいですか?
numpyにはinsert
関数があり、np.insert
を介して documentation でアクセスできます。
この場合、次のように使用します。
X = np.insert(X, 0, 6., axis=0)
最初の引数X
は、挿入されるオブジェクトを指定します。
2番目の引数0
は、場所を指定します。
3番目の引数6.
は、何を挿入するかを指定します。
4番目の引数axis=0
は、挿入がすべての列の位置0
で行われることを指定します。行を選択することもできますが、Xは列ベクトルなので、一貫性を保つことができると考えました。
この操作を約100,000回実行するコードをいくつか作成したので、これを行うための最速の方法を見つけ出す必要がありました。私は決してコード効率の専門家ではありませんが、jupyterノートブックで_%%timeit
_マジック関数を使用することでいくつかのことを理解できました。
私の発見:
np.concatenate(([number],array))
に必要な時間は最短です。それを1倍の時間と呼びましょう。
np.asarray([number] + list(array))
は約2倍になります。
_np.r_[number,array]
_は〜4xです。
np.insert(array,0,number)
は、ここでは8倍の最悪のオプションのようです。
array
(形状(15、)配列を使用)のサイズによってこれがどのように変化するかわかりません。また、提案したオプションのほとんどは、番号を先頭に置きたい場合にのみ機能します。ただし、それが質問の対象であるため、これらの比較を行うのに適した場所であると考えています。
以下を試すことができます
X = np.append(arr = np.array([[6]]), values = X, axis= 0)
既存のXに6を挿入する代わりに、Xで6を追加します。
したがって、最初の引数arr
はスカラー6のnumpy配列であり、2番目の引数は追加する配列であり、3番目は追加したい場所です
私はこれがかなり古いものであることを知っていますが、短い解決策はnumpyスライシングトリックを使用しています:
np.r_[[[6.]], X]
2番目の次元で行う必要がある場合は、np.c_を使用できます。
これは私が考えることができる最も整理されたバージョンだと思います