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.