def BMI(h,w):
  return (float)((w/h**2)*10000)

def AVG(arr,size,flag,num_sex):
  if size==0:
    return 0;
  sum=0.0;
  cnt=0
  for i in range(size):
    if(arr[i][2]==num_sex):
      cnt+=1
      sum+=arr[i][flag]
  return sum/cnt

n=int(input())

height= np.random.randint(low=160,high=201,size=n)
weight=np.random.randint(low=50,high=101,size=n)
sex=np.random.randint(low=0,high=2,size=n)

arr_bmi=np.array(0)
for i in range(n):
  arr_bmi=np.insert(arr_bmi,i,BMI(height[i],weight[i]))

people= np.vstack((height, weight, sex)).T
people_num=np.arange(1,n+1)
print('회원정보')
print(people)
print(people_num)
print(arr_bmi[:n])
print('남성 평균 신장: ',round(AVG(people,n,0,0),2)) 
print('남성 평균 몸무게:',round(AVG(people,n,1,0),2))
print('여성 평균 신장: ',round(AVG(people,n,0,1),2))
print('여성 평균 몸무게:',round(AVG(people,n,1,1),2))
print('신장의 오름차순으로 회원번호(인덱스 번호):', )
print('몸무게의 오름차순으로 회원번호(인덱스 번호):', )
print('BMI 오름차순으로 정렬된 사용자 정보 출력: ')
다음 코드는 어떤 형태로 출력 되는가?
    
1. 3*2 행렬 (2) 2*3 행렬 (3) 출력이 되지 않는다(3)

2. `np.median()` 은 `np.mean()` 과 달리 중앙값을 반환하므로 기존 배열이 정수로 이뤄져있다면 정수만을 반환한다. (O)
3. delete 함수는 2차원 이상의 배열에서 axis 값을 정하지 않으면 디폴트 값 0으로 지정하고 열단위의 삭제를 진행한다. (O, X) 

4. 만약 다차원 배열의 모든 원소를 for문 적용하고 싶은 경우 `reshape()`를 사용 해도 되지만 `.flat` 을 이용할 수 있다. (O, X)

5. `arr.T()`를 통해 변환한 배열과 달리 `arr.reshape()`를 통해 변환한 배열은 테이터 원본을 변경시키지 않고 복사하여 연산한 결과가 return 된다. (O)

6. 다음 1차원 배열 x가 있다.`x = np.array([3, 1, 4, 1, 5, 9, 2, 6, 5, 3])`
x에 `argsort()` 함수를 적용하면 x 배열의 요소들을 내림차순으로 정렬한 후, 각 요소의 인덱스를 반환한다. ( X)  

----> 오름 차순임

7. 다음과 같은 arr 배열이 있다. 
    
    ```python
    arr = np.array([[3, 1, 4, 2],
    								[9, 5, 7, 8],
    								[6, 10, 11, 12]])
    ```
    
    2차원 arr 배열의 `print((arr)[::-1])` 결과와 `print(np.sort(arr,axis=1))`결과는 동일하다. (X)
    
[[ 6 10 11 12]
 [ 9  5  7  8]
 [ 3  1  4  2]]

[[ 1  2  3  4]
 [ 5  7  8  9]
 [ 6 10 11 12]]

8. 원소의 개수가 10개인 배열 `arr[1,2,3,4,5,6,7,8,9,10]`에 `arr.reshape(4, -1)` 사용하면 자동으로 `[[1,2,3,4],[5,6,7,8],[9,10]]`으로 변환해준다. (X)

--->이유: cannot reshape array of size 10 into shape (4,newaxis)
9. matrix 차원이 증가함에 있어서 학습 데이터에 비해 차원의 수가 많이 늘어나면 모델의 성능이 저하되는데 이것을 `(차원의 저주 )`이라 한다.
10. resize 함수는 2차원 배열로만 변환이 가능하다. (X)

    
2. `np.median()` 은 `np.mean()` 과 달리 중앙값을 반환하므로 기존 배열이 정수로 이뤄져있다면 정수만을 반환한다. (O, X)

3. delete 함수는 2차원 이상의 배열에서 axis 값을 정하지 않으면 디폴트 값 0으로 지정하고 열단위의 삭제를 진행한다. (O, X) 

4. 만약 다차원 배열의 모든 원소를 for문 적용하고 싶은 경우 `reshape()`를 사용 해도 되지만 `.flat` 을 이용할 수 있다. (O, X)

5. `arr.T()`를 통해 변환한 배열과 달리 `arr.reshape()`를 통해 변환한 배열은 테이터 원본을 변경시키지 않고 복사하여 연산한 결과가 return 된다. (O)

6. 다음 1차원 배열 x가 있다.`x = np.array([3, 1, 4, 1, 5, 9, 2, 6, 5, 3])`
x에 `argsort()` 함수를 적용하면 x 배열의 요소들을 내림차순으로 정렬한 후, 각 요소의 인덱스를 반환한다. ( X)  

----> 오름 차순임

7. 다음과 같은 arr 배열이 있다. 
    
    ```python
    arr = np.array([[3, 1, 4, 2],
    								[9, 5, 7, 8],
    								[6, 10, 11, 12]])
    ```
    
    2차원 arr 배열의 `print((arr)[::-1])` 결과와 `print(np.sort(arr,axis=1))`결과는 동일하다. (X)
    
 [
 [ 6 10 11 12]
 [ 9  5  7  8]
 [ 3  1  4  2]
 ]

 [
 [ 1  2  3  4]
 [ 5  7  8  9]
 [ 6 10 11 12]
]

8. 원소의 개수가 10개인 배열 `arr[1,2,3,4,5,6,7,8,9,10]`에 `arr.reshape(4, -1)` 사용하면 자동으로 `[[1,2,3,4],[5,6,7,8],[9,10]]`으로 변환해준다. (X)

--->이유: cannot reshape array of size 10 into shape (4,newaxis)
9. matrix 차원이 증가함에 있어서 학습 데이터에 비해 차원의 수가 많이 늘어나면 모델의 성능이 저하되는데 이것을 `(차원의 저주 )`이라 한다.
10. resize 함수는 2차원 배열로만 변환이 가능하다. (X)