#include <stdio.h> int main(void) { for (int i = 0; i < 5; ++i) { for (int j = 0; j < 5; ++j) { if (i + j < 4) printf(" "); else printf("*"); } printf("\n"); } for (int i = 0; i < 5; ++i) { for (int j = 0; j < 9; ++j) { if (i + j < 5 || j - i > 5) printf(" "); else printf("*"); } printf("\n"); } return 0; } 이런 식으로 코드를 짰는데 제가 보기엔 제 코드에 문제가 없는데 삼각형 문제에서 출력 결과가 사진과 같이 나와요 i가 4이고 j가 8일 때 왜 "*"이 아닌 " "가 출력 되는지 모르겠어요.
int arr[5] = { 100, 200, 300, 400, 500 }; int* ptr1, * ptr3; ptr1 = arr; ptr3 = ptr1 + 4; 일 때 배열의 이름은 배열의 첫 번째 공간의 주소이다. 라고 한다면 ptr1은 arr[0]을 가리킨다. ptr1 = arr arr == &arr[0] 이라서 ptr1 + 4는 &arr[0] + (arr[0]의 자료형인 int의 크기) * 4 이고 배열의 이름은 배열의 첫 번째 공간의 주소를 가리키는 포인터와 비슷한 무언가이다. 라고 한다면 ptr1은 arr을 가리키고 arr은 arr[0]을 가리킨다. ptr1 = &arr &arr != &arr[0] 라서 ptr1은 arr[0]을 직접 가리키는 게 아니라 arr을 직접 가리키는거고 ptr1 + 4는 &arr + (arr의 자료형의 크기) * 4 인데 arr은 포인터와 비슷한거지 포인터가 아니라 주소도 없고 자료형도 없는데 여기서 뭔가 말이 모순되는 것 같고 계산 결과를 보면 후자는 절대로 아닌거 같은데 배열의 이름은 배열의 첫 번째 공간의 주소를 가리키는 포인터와 비슷한 무언가이다. 라는 표현은 맞는 표현 아닌가요? 맞는 표현인데도 불구하고 포인터와 비슷한 무언가라고 생각하고 ptr1 + 4를 하면 결과가 잘못되는 게 뭔가 아닌거 같아요. 제 생각의 어떤 부분이 뭐가 잘못된 거죠?
int a = 1; int* a_ptr = &a; a_ptr은 a를 가리키고 a_ptr + 1은 a + 1을 가리킨다. 배열에서는 원소에서 다음 원소로 갈 때 원소의 자료형의 크기 만큼 이동하는 걸 생각하면 a + 1은 a 다음의 변수를 가리키는 것이고, a에서 a의 자료형인 (int 자료형의 크기) * 1 만큼 이동하는 것이다. 그렇게 (int 자료형의 크기) * 1 만큼 이동을 해야지 a 다음의 변수를 가리킬 수 있다. 이렇게 생각을 해봤는데 이게 맞는 걸까요? a 다음의 변수라는 표현은 뭔가 틀린 것 같은데 저도 잘은 모르겠습니다.
fputs 함수의 함수 원형에서 첫 번째 인수가 char* 형태인데 char 형태의 ch를 인수로 입력해서 그런지 아래 오류가 발생하면서 실행이 안되는 것 같습니다. 'function': 'const char *' differs in levels of indirection from 'int' 혹시 다른 설정을 해야 하는 걸까요..??
int arr[2][3] = { {1, 2, 3}, {4, 5, 6} }; int* parr[2]; parr[0] = arr[0]; parr[1] = arr[1]; printf("%p\n", &parr[0]); printf("%p\n", parr[0]); printf("%p\n", arr); printf("%p\n", &arr[0]); printf("%p\n", arr[0]); printf("%p\n", &arr[0][0]); 이 예제를 제가 설명해보면 &parr [0]은 parr[0] 이라는 포인터의 주소이다. parr[0] 은 arr[0][0] 을 가리키는 포인터이다. arr 은 arr[0] 을 가리킨다. &arr[0] 에서 배열의 이름은 주소이기 때문에 & 를 붙이던 안 붙이던 똑같다. 따라서 arr[0] 과 같다. arr[0] 은 arr[0][0] 을 가리킨다. 따라서 &arr[0] 도 arr[0][0] 을 가리킨다. 그래서 출력을 하면 arr 과 &parr[0] 을 제외한 나머지는 전부 &parr[0][0] 을 출력해야 하는 것 같은데 실행 결과를 보면 arr 도 &arr[0][0] 을 출력하고 있어요. 제가 잘못 이해한 게 맞을텐데 뭐가 잘못된 건지 모르겠어요 도와주세요 질문이 너무 많아서 죄송합니다 제가 질문 게시판을 어지럽히는 것 같네요 ㄷㄷ
교수님 안녕하십니까 교수님의 수업을 정말 즐기면서 듣고있는 AI빅데이터 전공 대학생입니다. 교수님의 강의 피마 인디언 당뇨병 예측 편을 보고 여태 배운 것을 백분 활용하여 제 방식대로 따로 모델을 구현을 해보았는데요. 먼저 임신횟수와 Outcome을 제외한 나머지 column들에 있는 0 값들은 모두 결측치로 판단하고 평균 값으로 대체하였습니다. RandomForestClassifier 알고리즘을 사용하고 GridSearchCV 함수를 통해 best estimator를 추출였습니다. 정밀도와 재현율이 동시에 높으면 좋지만 재현율이 증가하면 정밀도가 하락하는 현상(trade-off) 때문에 둘 중 하나를 선택해야 했고 이 피마 인디언 당뇨병 데이터 셋 같은 경우 병의 발견 목적으로 모델을 제작한다고 했을 때 실제로 당뇨병인데 모델이 당뇨병이 아니라고 예측하는 것이 치명적이라고 생각하여 정밀도 보다는 재현율을 중점적으로 보았습니다. 그리하여 precision_recall_curve 함수를 통해 최적의 재현율과 F1_score얻은 threshold 값을 추출하였습니다. 제가 얻은 값은 오차 행렬 [[72 28] [ 4 50]] 정확도: 79.22% , 정밀도: 64.10% , 재현율 92.59%, F1_Score: 75.76% 임계값: 0.32212471005503873 입니다. 오차 행렬을 보았을때도 한쪽에 치우쳐있는 불균형도 없다고 판단하였고 정밀도와 재현율 f1_score도 괜찮게 나왔다고 판단했습니다. 임계값을 0.32212471005503873로 주었을 때 roc_auc_score는 0.82296이라는 1에 꽤나 근접한 수치를 얻었습니다. 질문1: 이런식으로 모델을 찾아가는 방식이 옳은 방식인지 궁금합니다. 질문2: 제가 선택한 모델을 사용한다고 한다면 매번 RandomClassifier로 fit한 model을 Binarizer을 통해서 threshold 값을 매번 지정해주어야 하는건가요? 애초에 처음 모델을 fit할 때 임계값을 제가 부여는 못하는 것일가요?
기초적인 질문이지만.. char의 음수부분 어떤때에 사용하는지 궁금합니다. char 의 양수 번호같은 경우는 ascii코드 베이스로 사용하는걸 알겠는데 음수부호를 가지고 char를 사용하게 되는 경우는 어떨때 사용하는걸까요? 그리고 어떤때에 unsigned char를 사용해야하는가도 궁금하네요..ㅎ
*(parr[j] + i)과 *(*(parr + j) + i))는 어느정도 이해를 했습니다. 예를 들면 *(parr[0] + 1) parr[0]에 담긴 데이터는 주소이고 그 주소는 arr0이라는 포인터와 비슷한 무언가를 가리킨다. 그리고 arr0이라는 포인터와 비슷한 무언가는 arr0[0]의 주소를 가리킨다. 그리고 arr0[0]은 arr0의 첫 번째 공간을 의미한다. 그러므로 parr[0]은 arr0[0]을 가리키는 것이고 parr[0]에 1을 더하면 arr0[0]의 다음 공간인 arr0[1]을 가리키게 되고 *로 그 공간에 접근하게 된다. * ( * (parr + 1) + 1) parr은 arr0을 가리킨다. 그리고 arr0은 arr0[0]을 가리킨다. 그러므로 parr에 1을 더하면 arr0[1]을 가리키게 된다. 거기에 *를 붙이면 arr0[1]의 공간에 있는 데이터에 접근을 한다. 거기서 1을 더하면 그 데이터에 1을 더하게 되는 것이다. 이렇게 이해를 했는데 맞는거겠죠? 이거 말고 질문이 있는데 parr[j][i]와 (*(parr + 1))[1]의 맨앞에 *가 없는데도 어떻게 그 공간에 접근해서 printf 함수로 출력을 했을 때 배열의 주소가 아닌 배열의 데이터가 출력 될 수 있는 건지 궁금합니다. parr[j]는 배열의 주소가 나오는데 parr[j][i]는 왜 배열의 값이 나오는지 이해가 안되요. 감사합니다
File "/usr/local/lib/python3.9/site-packages/MySQLdb/connections.py", line 193, in init super().__init__(*args, **kwargs2) django.db.utils.OperationalError: (1044, "Access denied for user 'django'@'%' to database 'django'") mariadb 컨테이너를 실행 후, django 컨테이너를 실행 시 위와 같은 오류가 발생합니다. 찾아보니 django 에 대한 권한이 없어서 그렇다고 하는데, 해결방법이 있을까요?
선생님 안녕하세요! 5장 회귀 실습 2:캐글경연 주택가격 예측-Advanced Regression Techniques - 01 을 듣다가 타겟 값인 Price를 로그 변환하여 정규 분포 형태로 변환하고, 피처들 중 숫자형 컬럼의 Null 값 데이터 처리 부분 코드를 다음과 같이 썼습니다. 그런데 결과가 사진과 같이 float64가 포함된 형태로 나왔습니다. 제가 어떤 부분에서 잘못한 건지, 그리고 어떻게 해야 선생님과 같은 결과가 나올 수 있나요?ㅎㅎ # SalePrice 로그 변환 original_SalePrice = house_df['SalePrice'] house_df['SalePrice'] = np.log1p(house_df['SalePrice']) # Null이 너무 많은 컬럼들과 불필요한 컬럼 삭제 house_df.drop(['Id', 'PoolQC', 'MiscFeature', 'Alley', 'Fence', 'FireplaceQu'], axis=1, inplace=True) # Drop하지 않는 숫자형 Null 컬럼들은 평균 값으로 대체 num_columns = house_df.dtypes[house_df.dtypes !='object'].index.to_list() house_df[num_columns].fillna(house_df[num_columns].mean(), inplace=True) # Null 값이 있는 피처명과 타입을 추출 null_column_count = house_df.isnull().sum()[house_df.isnull().sum() > 0] print('## Null 피처의 Type :\n', house_df.dtypes[null_column_count.index])
제가 이해한 대로 말씀드리자면 저희가 사용하는 intel의 cpu가 기본적으로 Little-Endian 방식을 채택한다고 하셨습니다.제가 사용하는 AMD의 cpu도 메모리 주소가 반대로 찍힙니다 그럼 AMD도 Little-Endian을 채택하는 것으로 이해하고 있으면 될까요??
우선 예제 코드를 먼저 보여드리겠습니다. char arr[13] = "Hello World\n"; char* arrr = "Hello World\n"; printf("%p\n", &("Hello World\n")); printf("%p\n", arrr); printf("%p\n", arr); "Hello World\n" 과 arrr이라는 포인터 변수의 대상이 완전히 일치한다는 것은 이해했습니다. 그래서 4행과 5행의 출력 결과는 같다는 것을 실습으로 확인했습니다. 그런데 6행의 출력 결과는 앞의 두 경우와 다르게 나왔습니다. 질문은 총 4가지입니다. 포인터 변수를 통해 직접 메모리 주소를 가져오는 것과 배열을 통해 지역변수를 선언하여 문자 배열의 정보를 담는 것은 전혀 다른 것인가요? 그렇다면 1행의 정보는 stack 영역에 저장되는 것인가요? 배열도 상수화된 포인터이기에 1행과 2행이 같은 메모리 주소를 가리켜야 되는 것이 아닌가요? 2행에서 선언된 포인터 변수의 경우 배열 연산자로 접근하여 쓰기를 시도할 경우 엑세스 위반의 예외를 알려주는데 읽고 쓰는 권한 때문에 다른 메모리 주소를 가리키게 되는 것인가요?