참고 : 장고를 알지 못합니다. 장고 모델에만 문자열을 전달할 수 있다고 가정합니다.
In [105]: arr = arr.reshape(10,10)
In [107]: arr[eval("slice(6,10), slice(2,5)")]
Out[107]:
array([[ 0.23903737, 0.07691556, 0.08544998],
[ 0.79273288, 0.73710837, 0.11193991],
[ 0.65617212, 0.53528755, 0.53514291],
[ 0.01626145, 0.59864093, 0.71240672]])
참고 : 2 차원 배열이있는 경우, 당신도 조각의 캐릭터 라인 튜플 전달할 수,
In [101]: arr = np.random.random((100,))
In [102]: arr[eval("slice(6,10)")]
Out[102]: array([ 0.60968632, 0.17116998, 0.24861622, 0.37071511])
나 :
당신은 문자열 "slice(...)"
을 평가 후면 수 그러나 문자열이 사용자 입력에서 오는 경우 eval
is inherently unsafe입니다.
다음은 더 안전한 방법입니다. 문자열로 구성된 튜플 목록을 전달하십시오. 각 튜플은 슬라이스를 나타냅니다.
In [108]: import ast
In [109]: ast.literal_eval("[(6,10), (2,5)]")
Out[109]: [(6, 10), (2, 5)]
In [110]: [slice(*item) for item in ast.literal_eval("[(6,10), (2,5)]")]
Out[110]: [slice(6, 10, None), slice(2, 5, None)]
In [111]: arr[[slice(*item) for item in ast.literal_eval("[(6,10), (2,5)]")]]
Out[111]:
array([[ 0.23903737, 0.07691556, 0.08544998],
[ 0.79273288, 0.73710837, 0.11193991],
[ 0.65617212, 0.53528755, 0.53514291],
[ 0.01626145, 0.59864093, 0.71240672]])
In [113]: arr[[slice(*item) for item in ast.literal_eval("[(0,1), (0,1)]")]]
Out[113]: array([[ 0.77409234]])