배열의 첫 번째 열 값이 동일한 경우 두 번째 열 값을 합계하려면 어떻게합니까?배열의 동일한 값을 합하는 방법
예 : 배열이 [0,1],[1,1],[1,2],[2,5],[2,6]
인 경우 결과는 [0,1],[1,3],[2,11]
이어야합니다.
제 경우에는 차이가 나는 경우 엔 감미로운 배열을 사용하고 있습니다.
배열의 첫 번째 열 값이 동일한 경우 두 번째 열 값을 합계하려면 어떻게합니까?배열의 동일한 값을 합하는 방법
예 : 배열이 [0,1],[1,1],[1,2],[2,5],[2,6]
인 경우 결과는 [0,1],[1,3],[2,11]
이어야합니다.
제 경우에는 차이가 나는 경우 엔 감미로운 배열을 사용하고 있습니다.
import numpy as np
a = np.array([[0, 1],
[1, 1],
[1, 2],
[2, 5],
[2, 6]])
d = {}
for k, v in a:
d[k] = d.get(k, 0) + v
b = np.array(d.items())
반환
b = np.array([[ 0, 1],
[ 1, 3],
[ 2, 11]])
또는 하나의 라인
다음from collections import Counter
b = np.array(sum((Counter({k:v}) for k,v in a), Counter()).items())
'카운터 ({k, v는 k에 대해)}'는 ([(0, 1), (1,2), (2, 6)]'를 반환 할 것이고, 필요하지 않은 것이지 – stalk
는 NumPy와없는 한 줄 솔루션입니다 (하지만 내장 사용 itertools) :
>>> from itertools import groupby, imap
>>> arr = [[0, 1], [1, 1], [1, 2], [2, 5], [2, 6]]
>>> [[k, sum(imap(lambda x: x[1], g))] for (k, g) in groupby(sorted(arr), lambda x: x[0])]
[[0, 1], [1, 3], [2, 11]]
첫 번째 항목이 실제로 a이기 때문에 사전을 사용할 수 있습니다. 키 : NumPy와 스마트 색인 사용
l=[ [0,1],[1,1],[1,2],[2,5],[2,6] ]
s={}
for e in l:
if e[0] in s: s[e[0]] += e[1]
else s[e[0]] = e[1]
: 당신은, (깎아 지른듯한 인성에 대한 내 마음에 드는 Counter(chain.from_iterable([k] * v for k,v in myarray)).items()
을 것) 한 라이너를 얻을 수있는 가장 읽을 수있는 재미 트릭의 모든 종류를 재생할 수 있지만
[[k,np.sum(x[x[:,0]==k][:,1])] for k in np.unique(x[:,0])]
및 아마도 가장 효율적인 방법은 defaultdict와 명시적인 루프를 사용하는 것입니다.
from itertools import defaultdict
count = defaultdict(int)
for k,v in myarray:
count[k] += v
print(list(count.items()))
더 자세히 설명해 주시겠습니까? 어떻게 작성했는지 결과를 얻으십니까? –
첫 번째 열이 정렬되어 있다고 가정 할 수 있습니까? 또는 적어도 같은 (첫 번째 열) 키 값 그룹으로 그룹화 되었습니까? – smci
@smci 예 첫 번째 열이 정렬 된 것으로 가정 할 수 있습니다. – user1361488