web-dev-qa-db-ja.com

numpy配列に要素を追加

私は次のnumpy配列を持っています

import numpy as np

X = np.array([[5.], [4.], [3.], [2.], [1.]])

最初に[6.]を挿入します。私はもう試した:

X = X.insert(X, 0)

xに挿入するにはどうすればよいですか?

29
piRSquared

numpyにはinsert関数があり、np.insertを介して documentation でアクセスできます。

この場合、次のように使用します。

X = np.insert(X, 0, 6., axis=0)

最初の引数Xは、挿入されるオブジェクトを指定します。

2番目の引数0は、場所を指定します。

3番目の引数6.は、何を挿入するかを指定します。

4番目の引数axis=0は、挿入がすべての列の位置0で行われることを指定します。行を選択することもできますが、Xは列ベクトルなので、一貫性を保つことができると考えました。

43
Rosey

この操作を約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、)配列を使用)のサイズによってこれがどのように変化するかわかりません。また、提案したオプションのほとんどは、番号を先頭に置きたい場合にのみ機能します。ただし、それが質問の対象であるため、これらの比較を行うのに適した場所であると考えています。

8
jbf81tb

以下を試すことができます

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_を使用できます。

これは私が考えることができる最も整理されたバージョンだと思います

1
T0eJam