답변:
append()
추가 된 요소가있는 이전 배열이 될 수있는 새 배열을 만듭니다.
요소를 추가하는 데 적절한 방법을 사용하는 것이 더 일반적이라고 생각합니다.
a = numpy.append(a, a[0])
a
어레이를 변경하지 않습니다 . 그러나 새로 수정 된 배열을 반환합니다. 따라서 a
수정이 필요한 경우 a = numpy.append(a,a[0])
사용해야합니다.
np.append
를 사용합니다 np.concatenate
. 애드온에 하나의 차원이 있는지 확인합니다. 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)
나중에 배열로 변환하는 파이썬 목록 사용 :
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는 두 요소가 모두 numpy 배열이어야합니다. 그러나 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)