回答:
append()
要素が追加された古い配列である新しい配列を作成します。
要素を追加するための適切な方法を使用するのがより普通だと思います:
a = numpy.append(a, a[0])
a
アレイを変更しません。ただし、新しい変更された配列を返します。したがって、a
変更が必要な場合a = numpy.append(a,a[0])
は、使用する必要があります。
np.append
使用しnp.concatenate
ます。アドオンに1つの次元があることを確認するだけです。OPエラーは、a[0]
次元が0 でした。
a.append(1)
、a.add(1)
またはリストのようなものさえあればa + [1]
一度だけまたは時々追加する場合np.append
は、配列での使用で問題ありません。このアプローチの欠点は、呼び出されるたびにメモリが完全に新しい配列に割り当てられることです。大量のサンプルで配列を拡大する場合は、配列を事前に割り当てるか(合計サイズがわかっている場合)、リストに追加して後で配列に変換することをお勧めします。
使用np.append
:
b = np.array([0])
for k in range(int(10e4)):
b = np.append(b, k)
1.2 s ± 16.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
後でpythonリストを使用して配列に変換する:
d = [0]
for k in range(int(10e4)):
d.append(k)
f = np.array(d)
13.5 ms ± 277 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
numpy配列を事前に割り当てます:
e = np.zeros((n,))
for k in range(n):
e[k] = k
9.92 ms ± 752 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
最終的なサイズが不明な場合、事前割り当てが困難な場合、50のチャンクで事前割り当てを試行しましたが、リストを使用することに近づきませんでした。
85.1 ms ± 561 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
これを試して:
np.concatenate((a, np.array([a[0]])))
http://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html
concatenateは、両方の要素が派手な配列である必要があります。ただし、a [0]は配列ではありません。それが機能しない理由です。
np.concatenate((a, [a[0]]))
。とにかく、リストは自動的に配列型に昇格され、入力を省略できます。
t = np.array([2, 3])
t = np.append(t, [4])
これは少しやり過ぎかもしれませんが、np.take
ラップアラウンドインデックスには常に関数を使用します。
>>> a = np.array([1, 2, 3])
>>> np.take(a, range(0, len(a)+1), mode='wrap')
array([1, 2, 3, 1])
>>> np.take(a, range(-1, len(a)+1), mode='wrap')
array([3, 1, 2, 3, 1])
np.insert([1,2,3], 3, 1)