첫째 -
np.vstack((b,a[~np.in1d(a[:,0],b[:,0])]*[1,0]))
샘플 실행됩니다. c
은 copy
일 필요는 없습니다. 새로운 변수 할당이면 충분합니다.
c = b
...
c= np.insert(c, len(c), [a[j,0], 0], axis = 0)
np.insert
은 입력을 수정하지 않습니다. 오히려 그것은 새로운 배열을 만듭니다. c=...
은 원래 할당을 대체하여 c
에 할당합니다. 따라서 원래의 c
할당은 단지 반복을 쉽게 작성하게 만듭니다.
당신이 마지막에 새로운 [a[j,0],0]
를 추가하고 있기 때문에, 당신은 CONCATENATE (insert
및 stack(s)
에서 사용하는 기본 기능을 사용할 수 있습니다. 실행 시간의 변화를 많이하지 않습니다
c = np.concatenate((c, [a[j,0],0]), axis=0)
합니다.a[j]
을 모두 한 번에 추가하는 것이 좋습니다.
이 경우 a[2,0]
및 a[3,0]
을 추가하려고합니다.
In [595]: a=np.array([[2,3],[4,5],[6,8],[9,6]])
In [596]: b=np.array([[2,3],[4,5]])
In [597]: ind = [2,3]
할당과 같은 접근 방식이 보일 것이다 채우기 : 순간, 옆으로 떠나, 우리가 찾는 방법의 질문은 [2,3], 우리가 할 수있는
이
In [605]: c = np.zeros_like(a) # target array
In [607]: c[0:b.shape[0],:] = b # fill in the b values
In [608]: c[b.shape[0]:,0] = a[ind,0] # fill in the selected a column
In [609]: c
Out[609]:
array([[2, 3],
[4, 5],
[6, 0],
[9, 0]])
변형이 될 것이다 새로운 a
값을 임시 배열을 구성하고, 나는 a1
만들고 내가 콘카하는 방법을 알아낼 너무 게으른이기 때문에 접근을 채우기 사용하고
In [613]: a1 = np.zeros((len(ind),2),a.dtype)
In [614]: a1[:,0] = a[ind,0]
In [616]: np.concatenate((b,a1),axis=0)
Out[616]:
array([[2, 3],
[4, 5],
[6, 0],
[9, 0]])
을 연결 tenate a[ind,0]
같은 것을 만들기에 충분한 0s. Divakar 보듯이 :)
는 np.in1d
는 경기
In [617]: np.in1d(a[:,0],b[:,0])
Out[617]: array([ True, True, False, False], dtype=bool)
In [618]: np.nonzero(~np.in1d(a[:,0],b[:,0]))
Out[618]: (array([2, 3], dtype=int32),)
In [619]: np.nonzero(~np.in1d(a[:,0],b[:,0]))[0]
Out[619]: array([2, 3], dtype=int32)
In [620]: ind=np.nonzero(~np.in1d(a[:,0],b[:,0]))[0]
당신은 또한 (값이 정렬됩니다) np.setdiff1d(a[:,0],b[:,0])
으로 입수 할 수있는 순서 a[ind,0]
신경 쓰지 않는 경우
을 찾는 편리한 방법입니다.
빠른 제안은 올바른 크기의 타겟 배열을 만들고, 오른쪽 슬롯에 'b'와 다른 조각들을 복사하는 것입니다. 'concatenate','stack' 그리고'insert'는 모두 그 동작의 어떤 형태를 어쨌든합니다. – hpaulj