난 Grid.aGrid
가 linspace(aMin, aMax, nA)
을 이용하여 생성된다 번역
A1, M1, A2, M2, A3, M3, E = meshgrid(Grid.aGrid, Grid.mGrid, Grid.aGrid, Grid.mGrid, Grid.aGrid, Grid.mGrid, Grid.eGrid, indexing='ij')
를 이용하여 생성
(A1, M1, A2, M2, A3, M3, E)
형상의 격자를 가지며, 마찬가지로 다른 그리드.
일부 Z = f(A1, ...)
을 고려하십시오. 여기에서 f()
은 일부 그리드 포인트를 부적절한 것으로 표시합니다. 단순화를 위해,하자.
Z = A1 + A2 + A3
Z[Z < 0] = NaN
Z[0, 1, 2, 3, 4, 5, 6]
을 고려하십시오. 실제 값 (aGrid[0], mGrid[1], aGrid[2], mGrid[3], aGrid[4], mGrid[5], eGrid[6])
에 해당하는 값을 포함합니다. 이것은 내가 f()
으로 표시되지 않은 Z
의 모든 점에 대해 달성하려고 정확히 : 등 z1
이 종류의 모든 곳
내가 사전
foo = {z1, z2, z3, ... zn}
를 만들
z1 = (aGrid[0], mGrid[1], aGrid[2], mGrid[3], aGrid[4], mGrid[5], eGrid[6])
이고, z1
의 위치에 해당하는 격자 값은 Z
입니다.
aGrid = arange(0, 10)
mGrid = arange(100, 110)
eGrid = arange(1000, 1200)
A,M,E = meshgrid(aGrid, mGrid, eGrid, indexing='ij')
# contains the grid index
Z = (A + M + E).astype(float)
Z[A < 3] = nan
# will contain the actual values, as tuples
Z2 = {}
for i, idx in enumerate(ndindex(Z.shape)):
a = aGrid[idx[0]]
m = mGrid[idx[1]]
e = eGrid[idx[2]]
if isnan(Z[idx]):
Z2[i] = NaN
else:
Z2[i] = (a, m, e)
효율성이 중요합니다. 이것을 달성 할 수있는 더 빠르고/깨끗한 방법이 있습니까? 사전을 사용하는 대안?
나는 특히 aGrid[idx[0]]
등을 적어 두지 않는 것이 싫어. 알고리즘을 좀 더 일반적으로 유지할 수 있습니까? 사용 broadcast_arrays()
for i, idx in enumerate(ndindex(Z.shape)):
# some magic happens here. What exactly?
someMagicList = magic(aGrid, mGrid, eGrid)
Z2[i] = someMagicList[idx]
이것은 내가하는 일보다 효율성이 크게 향상 된 것처럼 보입니다. 나는 이것을 대본에 넣으려고 노력하고있다. (나는 새로운 질문을하기에는 너무 짧다) :'NaN '이 아닌 사람들의 부분 집합을 어떻게 얻을 수 있습니까? 'statesRelevant = [np.isnan (z.any())]'가 아니라면 states에있는 z는 z를 모두 가지고 있습니다. 분명히 isnan()은'(nan, ..)을 가진 사람들을 선택하지 못했습니다. .)'그들. – FooBar
나는 당신의 질문을 이해하지 못합니다,'국가'는 무엇입니까? 'Z [~ np.isnan (Z)]'또는'Z2 [~ np.isnan (Z)]를 의미합니까? – HYRY
죄송합니다, 나는'Z2'을 (를) 의미합니다. isnan()의 지시자로'Z'를 사용하는 것은 좋지만,'Z2' 만 남긴다면 어떨까요? 나는 그것을 처리하는 함수를 통해서만'Z2'를 전달할 계획입니다. – FooBar