본문 바로가기

분류 전체보기640

9주차 - split, apply, pivot table을 이용해서 실습해보기 초반에는 모든 사전 자료형을 열거해서 데이터 프레임을 만들었지만, 사전자료형의 하나의 키에 여러 값을 리스트로 추가해서 데이터 프레임을 만드면 추후 행을 추가할 때 각 리스트의 요소들만 추가하면 되기 때문에 아래의 방식이 더 개선된 방식이다.  9.1은 split을 통해 구분된 데이터들을 기반으로 apply로 연산을 하는 것이 주요 포인트이다.    내가 한 방식은 특정 열의 행 값에 따라서 값을 부여해주었다.  하지만, 교수님은 Product로 행을 만들어주고 groupby(category_mapping)에서 category_mapping을 전달하면 pandas는 인덱스의 각 값에 대해 category_mapping 딕셔너리를 참조하여 자동으로 새로운 카테고리 값으로 매핑을 수행합니다. 따라서 그렇게 .. 2024. 10. 31.
Scaffold vs Surface의 차이 우리가 이전에 MainActivity.kt에서 onCreate()메서드에 Scaffold를 봤을 것이다. 이 Scaffold외에 Surface도 있다.  Scaffold: 전체화면의 주요 UI 컴포넌트를 배치할 수 있는 프레임워크를 제공하여 앱의 구조를 쉽게 설정할 수 있다. 주로, 앱의 메인 레이아웃을 설정할 때 사용된다.  예를 들어 상단 bar, 하단 navigation bar, floating action button을 포함한 화면을 구성할 때 유용하다.   위의 형태로 topBar, bottomBar, flaotingActionButton, Content 등을 구성할 수 있다.   Surface: 개별 UI 컴포넌트의 스타일과 배경을 설정하는데 사용되는 기본 구성요소이다. 주로 카드, 버튼, 박.. 2024. 10. 30.
Compose 기초 기본적으로 프로젝트를 생성하고 MainActivity.kt를 열어보면 위와 같은 파일 형태가 나온다.  "onCreate() {}": 애뮬레이터의 화면 레이아웃을 담당한다. (여기서 아무리 코드를 바꿔도 Preview에서는 반영되지 않는다.)  "@Composablefunc Greeting(...) { }": View의 구성을 담당한다.  "@Preview(...)@Composablefunc GreetingPreview() {...}": Preview 화면의 레이아웃을 담당한다. (여기서 아무리 바꿔도 실제 애뮬레이터에서는 반영되지 않는다.)  "onCreate메소드" override fun onCreate(savedInstanceState: Bundle?) { //시뮬레이터 용 super.onCr.. 2024. 10. 30.
[pandas] Pivot Tables Pivot Tables: 특정 행과 열을 기준으로 우리가 원하는 연산을 하는 것이다. 자세하게 말하면, 데이터를 요약하고 집계하기 위해 특정 행과 열을 기준으로 그룹화해서 다양한 연산(합, 평균, 개수)을 수행하는 테이블이다. 데이터 프레임 명.pivot_table(연산할 컬럼, index=기준이 되는 행, columns=기준이 되는 열)  이렇게 pivot table을 이용하면, 간단하게 행과 열을 기준으로 특정 값에 대한 연산을 할 수 있다. pivot table의 기본 연산은 mean이기 때문에 아무 코드 추가 없이도 생존자 여부의 평균을 계산할 수 있다.  각각에 다른 연산 적용 또한 같은 기준에 각각의 값에 다른 연산을 적용할 수도 있다.  정한 기준에 대한 전체에 대한 연산 적용 이렇게 ma.. 2024. 10. 29.
[pandas] GroupBy: Apply 이전에 배웠던 기준에 따라 선택된 데이터들끼리 연산하는 것이 Apply이다.   Aggregation: sum, median, max, min 같이 값들을 하나로 요약하는 과정이다.   이런 식으로 aggregate와 함께 연산을 써주면, key로 분류된 데이터들 각각에 min, medianm, max 연산을 해주고 그 결과를 보여준다. 이렇게 모든 열(data1, data2)에 같은 연산을 한번에 할 수도 있지만, 각 열에 다른 연산도 가능하다.  이렇게 data1에는 min연산을하고, data2에는 max연산을 해줄 수도 있다.     Filter: 그룹을 기준으로 특정 조건에 맞는 데이터만 남기는 과정이다. 예들 들면 그룹 별 평균이 특정 값 이상인 데이터만 남기는 것 왜 groupby된 데이터 .. 2024. 10. 29.
[pandas] GroupBy: Split ❓ Split이란?: 데이터 중 내가 원하는 기준에 있는 일부 데이터를 선택하는 것이다.      기존 값을 기준으로 split이런 식의 데이터가 있을 때, key를 기준으로 split을 한다면 아래와 같이 같은 키를 가진 행끼리 나누어 진다.keydataA0A3 keydataB1B4 keydataC2C5    사용자가 정의한 값을 기준으로 split기존에는 열중 하나의 값으로 겹치는 행끼리 split을 했다. 하지만 사용자가 직접 정의한 값을 기준으로 split을 할 수 있다. 위의 데이터가 있을 때 직접 정의한 L을 기준으로 값을 나눌 수 있다.  0은 0끼리, 1은 1끼리, 2는 2끼리 나눌 수 있다. [0인 것들]keydata1data2A05C23C59[1인 것들]keydata1data2B10A3.. 2024. 10. 29.
9-7장 이중 포인터 이중 포인터: 포인터를 가르키는 포인터이다. 즉, 주소를 갖고 있는 메모리의 주소를 갖고있는 메모리를 의미한다.  #includeint main(){ int a = 3; int* p = &a; int** pp = &p; printf("%d\n", *p); //3 printf("%d\n", **pp); //3 } 이처럼 pp가 이중 포인터이다. a의 주소를 담고 있는 p의 주소를 담고 있는 pp이다. 따라서, 간접 참조 연산자를 2개 써줘야하는데, **pp는 pp의 값을 접근하고, 다시 그 값은 주소이니깐 그 주소의 값을 접근하는 형태이다.  [예제]#includeint globlal_value = 30;void call_by_value(int* val){ //매개변수가 포.. 2024. 10. 29.
9-6장 함수 포인터 함수 포인터: 함수 포인터란, 함수를 가르키는 포인터이다. 즉 함수의 주소를 가질 수 있다. [형식]반환형 (* 함수 포인터 이름)(매개 변수1, 매개 변수2, ...);//예시int (*pf)(int, int); 함수 포인터는 따로 body가 필요하지 않다.또한 배열처럼 함수 이름 자체가 주소이기 때문에 주소 연산(&)는 필요하지 않다.  [예시 - 1]#includevoid A(){ printf("A입니다.");}void B(){ printf("B입니다.");}void C(){ printf("C입니다.");}int main(){ int x = 0; void(*p)(); printf("함수 명을 선택하시오. (A: 0, B: 1, C: 0): "); scanf("%.. 2024. 10. 29.
9-5장 함수가 포인터를 반환하는 경우 함수가 포인터를 반환하는 경우: 함수 종료시에도 남아 있는 변수의 주소를 반환해야한다. 만일 지역 변수의 주소를 반환한다면 함수가 종료되면 소멸되므로, 오류가 발생할 수 있다. [지역 변수]#include//결과를 result 저장하고 그 주소를 반환int* add(int x, int y){ int result; result = x + y; return &result;}int main(){ int* p = add(3, 4); printf("%d", *p); //오류 발생}  [전역 변수]#include//결과를 result 저장하고 그 주소를 반환int result;int* add(int x, int y){ result = x + y; return &result;}i.. 2024. 10. 29.
9-4장 배열과 포인터 배열의 이름이 바로 포인터이다. 즉, 배열은 따로 주소가 없이 배열 이름자체가 주소이다.   #includeint main(){ int a[] = {10, 20, 30, 40, 50}; printf("배열의 이름 = %u\n", a); // 배열의 이름 = 1868132144 printf("첫 번째 원소의 주소 = %u\n", &a[0]); // 첫 번째 원소의 주소 = 1868132144}   따라서, 포인터도 배열처럼 사용할 수 있다. #includeint main(){ int a[] = {10, 20, 30, 40, 50}; int *p; p=a; printf("a의 첫 번째 원소 = %u\n", a[0]); // 10 printf("p의 첫.. 2024. 10. 28.
9-3장 포인터와 함수 함수 호출 시 인수 전달 방법1. 값에 의한 호출: 인수의 값이 매개 변수로 복사된다. 따라서 함수가 종료되면 매개 변수의 값은 사라진다. 즉, 실제 인자들의 값은 유지됨. 2. 참조에 의한 호출: 인수의 주소가 매개 변수로 복사된다. 따라서 함수에서 인자로 받은 주소를 이용해서 값을 변경하면 실제 인자들의 변수 값도 변경된다. 포인터 사용시 주의할 점🚨 초기화가 안된 포인터를 사용하면 안된다.🚨 초기화 되지 않은 포인터 변수에 값을 넣으면 그 포인터가 어느 곳에 있는지 모르기 때문에 해당 포인터가 프로그램에서 중요한 연산에 있는 메모리를 할당하고 있는 상황에서 값을 넣으면 프로그램이 망가질 수 있기 때문에 주의해야한다. 🚨 포인터가 아무것도 가리키고 있지 않은 경우에는 NULL로 초기화해야 한다.🚨 예.. 2024. 10. 28.
9-2장 포인터의 연산 포인터연산에는 증가(++), 감소(--), 덧셈(+), 뺄셈(-) 연산이 있다. 증감 연산의 경우 포인터가 가르키는 객체의 크기가 1의 의미를 가지게 된다.   int x = 10; int *p = &x; //1000++p; //1000 + sizeof(int) = 1004    포인터의 증감 연산    간접 참조 연산자와 증감 연산자 2024. 10. 28.
9-1장 포인터란? ❓포인터란?: 주소 그 자체이다. 즉, 메모리의 주소이다. ❓포인터 변수란?: 메모리의 주소를 가지고 있는 변수를 의미한다.  메모리: 변수가 저장되는 공간을 의미한다. 메모리는 byte 단위로 접근할 수 있다.  메모리에는 데이터 영역, Heap 영역, Stack영역이 있다.   데이터 영역: 전역 변수 및 static 변수가 할당되는 영역 (프로그램의 시작 시 할당되어 종료 시 소멸된다.) Heap영역: 프로그래머가 할당하는 영역(프로그래머가 명시적으로 할당하고 소멸시킨다.)  Stack 영역: 함수 호출 시 생성되는 지역 변수 및 매개 변수가 저장되는 영역( 함수 호출이 완료되면 소멸된다.)     자료형 별 메모리에 저장되는 형식int main(void){ int i = 10; char.. 2024. 10. 28.
cs231n - lecture11(CNNs in practice) Data Augmentation (데이터 증강): 원본 이미지를 변형하는 과정을 추가하여, 모델의 성능을 증가시키는 방법이다. 즉, label을 변하지 않고 label의 pixel의 값을 여러 형태로 변형 시켜 모델을 학습시키는 것이다. Horizontal flips(수평 뒤집기): 이미지 좌우를 뒤집는 간단한 방식  Random crops / scalse(무작위 자르기 및 크기 조정): 이미지를 무작위로 자른 후 일정한 크기로 맞추는 방식 ResNet에서는 아래와 같은 방식을 사용했다. [이미지 생성]1. [256, 480] 사이의 하나의 수를 골라 이를 L이라고 한다. (이 때, L은 width와 height 둘 중 하나로, 더 짧은 쪽의 길이를 의미한다.) 2. 학습시킬 이미지를 이 L을 기준으로 .. 2024. 10. 27.
5.10 Design of accumulator logic 해당 부분을 확대해보면 아래와 같다.  자, 이제 이전에 설계했던 방식대로 " AC ← ? " 형태인 수식을 모두 가져와서 분류하는 작업을 해보자.   이렇게 분류된 것을 바탕으로 논리 회로를 설계해보면 아래와 같다.  위의 식은 식의 왼쪽 조건의 경우만 따져서 만든 논리 회로이기 때문에 정확한 설계가 아니다. 따라서 AND와 ADD 다양한 연산을 신제 피연산자와 만든 논리 회로는 아래의 사진과 같다. 2024. 10. 27.
5.9 Design of basic computer 1. 기본적인 컴퓨터의 구성요소     2. Register의 LD, INR, CLR 설계AR의 LD, INR, CLRAR을 변경한다는 것은 " AR ← ? " 형태의 모든 수식들이다. 따라서, 이전에 배웠던 " AR ← ? " 형태를 모두 가져와보면 아래와 같다.  이렇게 "AR ← ?" 가져왔을 때 상위 3개는 Load에 관한 내용이고, RT₀은 Clear에 관한 내용, D₅T₄ 는 Increment에 관한 내용이라는 것을 알수 있다.  그래서 분류를 해보면 위의 사진과 같고 이를 논리 게이트로 표현해보자.   이런식으로 해당 레지스터를 변경시키는 모든 수식을 가져오고 그 변경된 값을 LD, INR, CLR로 분리하여 논리 게이트를 만들 수 있다.    3. Memory의 Read 설계 Memory를.. 2024. 10. 27.
5.8 Complete computer description 전체적인 Flowchart   전체적인 Functions 이표를 보고 외우는 것은 어렵지만, 이 표를 보고 어떤 동작인지, 각각의 변수들의 의미하는 것이 무엇인지는 알아야한다. 2024. 10. 27.
5.7 Input-output and interrupt 1. 기존의 방식(비효율적인 방법)   AC, INPR, OUTR의 기본 역할 AC(누산기): 16bit 크기의 레지스터로, 컴퓨터의 계산과 명령어 수행중 발생하는 중간 결과를 일시적으로 저장하는 역할을 한다. INPR(입력 레지스터): 8bit 크기의 레지스터로, 키보드에서 입력된 데이터를 잠시 보관해두는 공간이다. OUTP(출력 레지스터): 8bit 크기의 레지스터로, 프린터로 데이터를 보내기 전에 일시적으로 데이터를 저장하는 공간이다.    FGI와 FGO 플래그의 역할 FGI(Input Flag): 키보드로부터 입력이 완료되었을 때 1로 설정한다. FGI가 1이 되면 컴퓨터는 입력된 데이터를 처리할 준비가 되었다는 신호로 인식한다. FGO(Output Flag): 프린터로 데이터를 보낼 준비가 되.. 2024. 10. 27.
5.6 Memory reference instructions Memory reference instructions란?  위 format에서 Opcode의 값이 0 0 0 ~ 1 1 0으로 명령어가 결정이 되고, I의 값이 0이면 직접 참조, 1이면 간접 참조인 Instruction이다.  AND(Opcode의 값이 0 0 0인 경우): 유효 주소가 가리키고 있는 메모리의 값과 AND 연산을 한 후 AC에 저장하는 것 Opcode의 값이 0 0 0 으로 동일하지만 I의 값에 따라서 16진수 표현 방식이 달라진다.즉, 간접 참조라면 1 0 0 0 x x x으로 8 x x x가 되고 직접 참조라면 0 0 0 0 x x x으로  0 x x x가 된다.      ADD(Opcode의 값이 0 0 1인 경우): 유효 주소가 가리키고 있는 메모리의 값과 ADD 연산을 한 후 .. 2024. 10. 27.
5.5 Instruction cycle + Register reference instruction 하나의 Instruction(명령어)는 하나의 사이클로 이루어져있다. 하나의 사이클을 지나면서 명령어가 수행된다. 사이클의 종류    Fetch & Decode(모든 명령어에 똑같이 적용)    [T₀: AR ← PC]   [T₁ : IR ← M[AR], PC ← PC + 1]   [T₂ : D₀ ,…, D₇ ← Decode IR(12 - 14), AR ← IR(0 - 11), I ← IR(15)]   명령어 사이클의 전체적인 Flow chart     Register reference instruction: I가 0이고, Opcode가 1 1 1인 경우  Bⁱ는 Register operation의 12bit에서 i 번째를 제외한 나머지는 0인 것이다. 즉, B₂는 0 0 0 0 0 0 0 0 0 1 0.. 2024. 10. 27.
5.4 Timing and control IR(Instruction Register): 현재 CPU가 실행할 명령어를 저장한다. 3x8 decoder + I: Opcode, 메모리 참조 명령어를 사용할지, 레지스터 참조 명령어를 참조할지, I / O 명령어를 사용할지를 결정 4x16 decoder: 명령어를 순차적으로 실행하기 위해 클럭과 연결된 시퀀스 카운터를 사용해서 제어 신호를 생성한다. Control Logic Gates: 디코더에서 나온 신호를 기반으로 제어 논리가 구성되어 CPU 내부 작업 흐름을 제어하는 신호를 생성한다. Timing   클럭 신호(Clock Signal)와 타이밍 신호(Timing Signal) 간의 관계  여기서 중요한 것은 실제 데이터 전송은 클럭이 상승하는 순간 발생한다. 클럭의 신호는 주기적으로 변경되는데,.. 2024. 10. 27.
5.3 Computer Instructions Instructions format의 3가지 형태 1. Memory-reference instruction (메모리 참조 명령어)Opcode명령어가 어떤 연산을 수행할지를 나타낸다. 000 ~ 110까지 작성가능하다.I명령어가 직접 주소 지정 방식(I=0)인지, 간접 주소 방식(I=1)인지를 나타낸다. Address명령어가 참조하는 메모리의 주소를 나타낸다. 사용 예시: 메모리에서 데이터를 읽어오는 연산이나 메모리에 데이터를 저장하는 연산을 하는 것  2. Register-reference instruction (레지스터 참조 명령어)Opcode111로 고정되어 있으며 I에 의해서 레지스터 참조 명령(I=0)인지, 입출력 명령(I=1)인지가 결정된다. I레지스터 참조 명령(I=0)인지, 입출력 명령(I=.. 2024. 10. 27.
5.2 Computer registers [Regiters]: 각각의 특수한 기능을 하는 레지스터를 지정을 해놓은 방식이다.    [위 레지스터들을 갖는 기본 컴퓨터에서의 데이터 이동 방식 - Bus system]   LD(Load), INR(Increment), CLR(Clear)를 갖는 레지스터해당 레지스터(AR, PC, DR, AC, TR)는 우리가 앞에서 배웠던 병렬 로드 카운터 레지스터를 12bit로 구현한 것이다.     LD(Load)를 갖는 레지스터해당 레지스터(IR, OUTR)는 우리가 앞에서 배웠던 병렬 로드 레지스터를 12bit 또는 8bit로 구성한 것이다.   레지스터를 선택하는 방식S2SSRegister000 001AR010PC011DR100AC101IR110TR111Memory  레지스터는 Select에 의해서 레지스.. 2024. 10. 27.
5.1 Instruction codes micro operation(마이크로 연산)들이 모여서 instructions이 되고, 그 instructions이 모여서 프르그램이 된다. ❓ Instruction이란?: CPU가 프로그램에서 수행해야 할 구체적인 작업을 정의하는 기본 명령어이다. 인스트럭션은 연산 코드와 피연산자로 이루어지며, 이를 통해 CPU가 데이터를 처리하고 명령을 수행하게 된다.  Instruction의 기본 포멧즉  instruction은 명령어의 종류와 피연산자의 주소로 이루어져있고, 각각 4bit, 12bit로 이루어져있다. 그리고 피연산자의 값은 16 bit로 이루어져있다.    memory의 구조 메모리의 사이즈는 16bit이고, 메모리 전체의 주소는 instruction의 Adress에 의해서 결정된다. instru.. 2024. 10. 27.
8장 함수 1. 함수의 정의    2. 지역변수와 전역변수: 함수 안에서 정의되는 변수는 지역 변수라고 부르고, 해당 함수 안에서 만 사용이 가능하다. 반면에 함수의 외부에서 선언되는 변수는 전역 변수라고 불린다. 함수의 매개변수는 지역 변수일까?맞다! 다만 초기값은 인자로 받는 다는 점에서만 다르고 나머지는 지역 변수의 특징과 같다.  지역 변수전역 변수기본 초기값쓰레기 값0동시에 존재할 경우{ } 내부에서는 지역 변수가 우선이다. { } 외부에서는 전역 변수가 우선이다.   3. 정적 지역 변수: 블록에서만 사용되지만 블록을 벗어나도 자동으로 삭제되지 않는 변수 / 앞에 static을 붙인다. : 함수가 여러번 선언되어도 새로 초기화하지 않고 호출된 이후 연산된 값을 유지한다. : 정적 지역변수는 함수내부에서만.. 2024. 10. 25.