2016-10-13 2 views
1

N-dimensionalDataArray을 만드는 방법은 시각적으로 가장 쉬운 방법이며 np.ndarray을 만든 다음 내가 만든 좌표로 값을 채우는 것이 었습니다. 실제로 시도했을 때 xr.DataArray을 업데이트하는 방법을 알 수 없었습니다.`.sel()`인덱서를 사용하여`xarray.DataArray`를 업데이트하는 방법은 무엇입니까?

내가 작성한 라벨을 사용하여 초기화 한 xr.DataArray을 어떻게 업데이트 할 수 있습니까? 내 실제 데이터는 훨씬 더 복잡한 데이터 세트입니다. 그러나 이것은 내가하려는 일을 요약 한 것입니다. 나는 .loc을 사용할 수 있지만 때로는 나의 ndarrays이 어둡고 복잡한 위치에있을 때 나는 어둠의 순서를 모른다.

# Construct DataArray 
DA = xr.DataArray(np.ndarray((3,3,5)), dims=["axis_A","axis_B","axis_C"], coords={"axis_A":["A_%d"%_ for _ in range(3)], 
                        "axis_B":["B_%d"%_ for _ in range(3)], 
                       "axis_C":["C_%d"%_ for _ in range(5)]}) 
# <xarray.DataArray (axis_A: 3, axis_B: 3, axis_C: 5)> 
# array([[[ 0., 0., 0., 0., 0.], 
#   [ 0., 0., 0., 0., 0.], 
#   [ 0., 0., 0., 0., 0.]], 

#  [[ 0., 0., 0., 0., 0.], 
#   [ 0., 0., 0., 0., 0.], 
#   [ 0., 0., 0., 0., 0.]], 

#  [[ 0., 0., 0., 0., 0.], 
#   [ 0., 0., 0., 0., 0.], 
#   [ 0., 0., 0., 0., 0.]]]) 
# Coordinates: 
# * axis_B (axis_B) <U3 'B_0' 'B_1' 'B_2' 
# * axis_A (axis_A) <U3 'A_0' 'A_1' 'A_2' 
# * axis_C (axis_C) <U3 'C_0' 'C_1' 'C_2' 'C_3' 'C_4' 

# # Update? 
DA.sel(axis_A="A_1", axis_B="B_1", axis_C="C_1").values = 1 
DA.max() 
# # <xarray.DataArray()> 
# # array(0.0) 

DA.sel(axis_A="A_1", axis_B="B_1", axis_C="C_1") = 1 
# # File "<ipython-input-17-8feb7332633f>", line 4 
# #  DA.sel(axis_A="A_1", axis_B="B_1", axis_C="C_1") = 1 
# #              ^
# # SyntaxError: can't assign to function call 

답변

2

키워드 인수가 내부 대괄호로 지원되지 않는다는 Python 구문의 불행한 제한 때문에 이것은 정말로 어색합니다.

그래서 대신, 대신 .loc에 사전으로 .sel에 인수를 넣어해야합니다

DA.loc[dict(axis_A="A_1", axis_B="B_1", axis_C="C_1")] = 1 
+0

다시 한번 감사 @Stephan을! 나는 http://xarray.pydata.org/en/stable/indexing.html에 그 문법을 보았지만 그런 식으로 업데이트 할 수 있다는 것을 몰랐다. –