2013-03-11 4 views
1

크기가 (3, 3) 인 NumPyarray이 있습니다. array의 모양을 __main__ 단위로 인쇄하면 (3, 3)이됩니다. 그러나이 배열을 함수에 전달할 때 함수의 크기를 출력 할 때 (3,)이됩니다.NumPy 배열 크기 문제

왜 이런 일이 발생합니까?

튜플의 마지막 요소를 지정하지 않은 것은 무엇을 의미합니까? 즉, (3,)이 처음에는 유효하지 않은 튜플이되어서는 안됩니까?

+1

(3,)은 요소가 하나있는 줄을 나타냅니다. 'x = (3,)'는 튜플을 제공하고,'x = (3)'는 튜플을주지 않을 것입니다 – zzk

답변

2

두 번째 질문에 대한 답변 :

튜플의 파이썬은 n 차원입니다. 즉, 1-2-3-...-n 튜플을 가질 수 있습니다. 구문으로 인해 1-dimensional 튜플을 나타내는 방법은 ('element',)입니다. 여기서 후행 쉼표는 필수 항목입니다. ('element')이있는 경우 이것은 단순히 괄호 안에있는 표현식입니다. 따라서 (3) + 4 == 7이지만 (3,) + 4 == TypeError입니다.

당신은 가능성이 주위에 배열을 전달 뭔가 잘못을하는 것보다 더 위치 : 마찬가지로 ('element') == 'element'.

귀하의 첫 번째 질문에 대답합니다. 배열에 어떤 종류의 돌연변이가 없으면 NumPy 배열 자체가 왜곡 될 이유는 없습니다.

2

튜플은 다음과 같습니다. (3,)은 단일 요소 (이 경우 단일 차원)가있는 튜플이라는 의미입니다. 올바른 문법입니다. 후속 ,을 사용하면 다음과 같이 보일 수 있습니다. (3)이므로 파이썬은이를 튜플이 아닌 괄호로 묶인 숫자로 해석합니다.

실제 코드를 보는 것이 유용 할 수 있지만 전체 배열, 단지 행 (또는 열)을 전달하지 않는다고 생각합니다.

2

코드를 보지 않고도 numpy 배열을 재 형성하는 이유를 알기 어렵습니다.

첫 번째 질문은 단일 요소 튜플의 표준 표기법입니다. 괄호가 아닌 쉼표는 튜플로 만드는 요소입니다. (3+3) * 2을 고려해보십시오 - 대괄호가 튜플을 만든 경우 튜플을 정수로 곱할 수 없기 때문에 전체식이 유효하지 않습니다. 더 일반적으로, 파이썬은 쉼표 사방에 후행 허용 :이 또한 목록, 사전 및 기능 작동

>>> (3,3,) == (3,3) 
True 

를 호출 - 기본적으로, 파이썬은 쉼표로 구분 된 요소를 기대 사방 경우, 콤마는 유효합니다.