numpy의 배열에 단일 요소 추가


122

다음을 포함하는 numpy 배열이 있습니다.

[1, 2, 3]

다음을 포함하는 배열을 만들고 싶습니다.

[1, 2, 3, 1]

즉, 배열 끝에 첫 번째 요소를 추가하고 싶습니다.

나는 명백한 것을 시도했다.

np.concatenate((a, a[0]))

하지만 오류가 발생합니다. ValueError: arrays must have same number of dimensions

나는 이것을 이해하지 못한다-배열은 둘 다 단지 1d 배열이다.


1
np.insert([1,2,3], 3, 1)
— Sparkler

답변:


163

append() 추가 된 요소가있는 이전 배열이 될 수있는 새 배열을 만듭니다.

요소를 추가하는 데 적절한 방법을 사용하는 것이 더 일반적이라고 생각합니다.

a = numpy.append(a, a[0])

29
이 명령은 a어레이를 변경하지 않습니다 . 그러나 새로 수정 된 배열을 반환합니다. 따라서 a 수정이 필요한 경우 a = numpy.append(a,a[0])사용해야합니다.
— Amjad

np.append를 사용합니다 np.concatenate. 애드온에 하나의 차원이 있는지 확인합니다. OP 오류는 a[0]0 차원입니다.
— hpaulj

요소 하나만 추가하려는 경우 append가 완전히 새로운 배열을 만드는 이유는 무엇입니까?
— ed22

그런 간단한 명령을 위해 다른 함수를 호출해야한다는 사실이 마음에 들지 않습니다. 자체 좋아 배열의 내부 방법이 있다면 그것은 더 좋은 것 a.append(1), a.add(1)같은 목록에 또는 뭔가 아날로그a + [1]
— 페르난도 비트 만

17

가끔씩 한 번 또는 한 번만 추가 할 때 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)

14

a[0]배열이 아니므로의 첫 번째 요소 a이므로 차원이 없습니다.

a[0:1]대신 사용 a하면 단일 항목 배열 내부 의 첫 번째 요소가 반환 됩니다.



10

이 명령은

numpy.append(a, a[0])

a배열을 변경하지 않습니다 . 그러나 새로 수정 된 배열을 반환합니다. 따라서 a수정이 필요한 경우 다음을 사용해야합니다.

a = numpy.append(a, a[0])


3

이것은 약간의 과잉 일 수 있지만, 나는 항상 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])

2

말하고 a=[1,2,3]당신은 그것을 원합니다 [1,2,3,1].

내장 된 추가 기능을 사용할 수 있습니다.

np.append(a,1)

여기서 1은 정수이고 문자열 일 수 있으며 배열의 요소에 속할 수도 있고 속하지 않을 수도 있습니다. 인쇄물:[1,2,3,1]


StackOverflow에 오신 것을 환영합니다! 당신은 읽어보십시오 이 가이드 방법 형식 코드에를하고 또한 이것이 허용 대답에 아주 오래된 질문 몇 가지 새로운 답변을, 더 나은 :) 더 읽을 수 있도록 답변을 업데이트
— 0mpurdy

0

요소를 추가하려면 append()

a = numpy.append(a, 1) 이 경우 배열 끝에 1을 추가하십시오.

요소를 삽입하려면 insert()

a = numpy.insert(a, index, 1) 이 경우 인덱스를 사용하여 배열의 위치를 ​​설정하여 원하는 곳에 1을 넣을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.