사용 NumPy와 - 기본적으로
a = df.values
out = a[np.abs(a[:,1:] - dfB.values.ravel()).argmin(0),0]
, 우리는 dfB
빼기 dfA
의 각 행에서 그리고 우리가 NumPy 배열로 작업하고 있기 때문에 (우리가 그 wi를 추출 했으므로 th .values
), 이것들은 broadcasted manner
에서 효율적으로 뺍니다. 그런 다음 절대 값을 찾고 .argmin(axis=0)
인 각 열을 따라 arg-minimum을 찾으십시오. 축약어는 .argmin(0)
입니다.
NaNs
도 함께 사용하는 경우 np.nanargmin
을 사용하여 무시하십시오. 단계 샘플 실행하여
단계는 쉬운 일이 이해할 수 있도록하기 - 이것에 대한
# Extract array from dfA
In [9]: a = dfA.values
# Slice a from col-1 onwards and perform broadcasted differencing with dfB values
In [10]: a[:,1:] - dfB.values.ravel()
Out[10]:
array([[-0.92 , -0.802, -0.642, -0.523],
[-0.02 , -0.042, -0.022, -0.013],
[-0.02 , -0.042, -0.012, -0.003],
[ 0. , -0.022, 0.008, 0.017],
[ 0.02 , -0.002, 0.028, 0.037],
[ 0.04 , 0.018, 0.048, 0.057]])
# Get absolute values
In [11]: np.abs(a[:,1:] - dfB.values.ravel())
Out[11]:
array([[ 0.92 , 0.802, 0.642, 0.523],
[ 0.02 , 0.042, 0.022, 0.013],
[ 0.02 , 0.042, 0.012, 0.003],
[ 0. , 0.022, 0.008, 0.017],
[ 0.02 , 0.002, 0.028, 0.037],
[ 0.04 , 0.018, 0.048, 0.057]])
# Look for argmin along each col
In [14]: idx = np.abs(a[:,1:] - dfB.values.ravel()).argmin(axis=0)
In [17]: idx
Out[17]: array([3, 4, 3, 2])
# First col from a
In [15]: a[:,0]
Out[15]: array([ 0., 1., 2., 3., 4., 5.])
# Index into first col with those indices to select the desired output values
In [16]: a[idx,0]
Out[16]: array([ 3., 4., 3., 2.])
흠, 어쩌면 타이밍의 차이가 있을지도 모른다. NaN 처리 때문이다. 어떻게 생각하니? – jezrael
@jezrael 나는 배열로 생각하면 그 방법이 빠를 것이라고 생각 하겠지요? Nan 처리는'np.nanargmin()'으로 해결할 수 있습니다. – Divakar
@jezrael 팬더는 이러한 감산에 '방송'을 사용합니까? – Divakar