산포된 데이터를 정합하는 직선을 찾는 것으로 이해해도 무방합니다. 주어진 데이터를 이용해 기울기와 절편을 구하는 방법입니다.
먼저 행렬연산을 통해 구하는 방법을 설명합니다. 그리고 퍼셉트론에 사용된 것과 같은 방법을 다시 설명하므로 선택적으로 듣기 바랍니다.
설명된 예제에 대한 C 언어 코드를 제공합니다. Tensorlow 코드는 정합 과정을 시각화하여 보여줍니다.
산포된 데이터를 정합하는 직선을 찾는 것으로 이해해도 무방합니다. 주어진 데이터를 이용해 기울기와 절편을 구하는 방법입니다.
먼저 행렬연산을 통해 구하는 방법을 설명합니다. 그리고 퍼셉트론에 사용된 것과 같은 방법을 다시 설명하므로 선택적으로 듣기 바랍니다.
설명된 예제에 대한 C 언어 코드를 제공합니다. Tensorlow 코드는 정합 과정을 시각화하여 보여줍니다.
"R을 이용한 데이터 처리 & 분석 실무 - 서민구 지음" 정리 자료 #4
- https://thebook.io/006723/
- 첫번째 : goo.gl/FJjOlq
- 두번째 : goo.gl/Wdb90g
- 세번째 : goo.gl/80VGcn
- 네번째 : goo.gl/lblUsR
"R을 이용한 데이터 처리 & 분석 실무 - 서민구 지음" 정리 자료 #1
- https://thebook.io/006723/
- 첫번째 : goo.gl/FJjOlq
- 두번째 : goo.gl/Wdb90g
- 세번째 : goo.gl/80VGcn
- 네번째 : goo.gl/lblUsR
"R을 이용한 데이터 처리 & 분석 실무 - 서민구 지음" 정리 자료 #4
- https://thebook.io/006723/
- 첫번째 : goo.gl/FJjOlq
- 두번째 : goo.gl/Wdb90g
- 세번째 : goo.gl/80VGcn
- 네번째 : goo.gl/lblUsR
"R을 이용한 데이터 처리 & 분석 실무 - 서민구 지음" 정리 자료 #1
- https://thebook.io/006723/
- 첫번째 : goo.gl/FJjOlq
- 두번째 : goo.gl/Wdb90g
- 세번째 : goo.gl/80VGcn
- 네번째 : goo.gl/lblUsR
This document discusses structures in C programming. It explains that structures can contain elements of different data types, accessed by name, unlike arrays where all elements must be of the same type and accessed by index. It provides examples of declaring a structure type with members, defining structure variables, accessing members using the dot operator, passing structures to functions, and initializing an array of structures.
The document discusses call-by-value in function invocation in C. When a function is called, only the values of the arguments are passed to the function, not the variables themselves. So any changes made to the parameters inside the function are not reflected in the calling function. This causes an issue when trying to swap variables by passing them to a Swap function.
2. 2
Two-Dimensional Arrays
§ 2차원 배열 Syntax
data_type variable_name[ number][ number ];
Array dimensions
Declarations of arrays Remarks
int a[100]; a one-demensional array
int b[2][7]; a two-demensional array
int c[5][3][2]; a three-demensional array
3. 3
Two-Dimensional Arrays
§ int a[3][4]의 논리적 배치
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]
row 0
row 1
col 0 col 1 col 2 col 3
row 2
4. 4
Two-Dimensional Arrays
§ Two-Demensional Arrays #include <stdio.h>
#define M 3 /* number of rows */
#define N 4 /* number of columns */
int main(void){
int a[M][N], i, j, sum = 0;
for ( i = 0; i < M; ++i )
for ( j = 0; j < N; ++j )
a[i][j] = i + j;
for ( i = 0; i < M; ++i ) {
for ( j = 0; j < N; ++j )
printf(“a[%d][%d] = %d “,
i, j, a[i][j] );
printf(“n”);
}
return 0;
}
a[0][0] = 0 a[0][1] = 1 a[0][2] = 2 a[0][3] = 3
a[1][0] = 1 a[1][1] = 2 a[1][2] = 3 a[1][3] = 4
a[2][0] = 2 a[2][1] = 3 a[2][2] = 4 a[2][3] = 5
5. 5
Two-Dimensional Arrays
§ int a[3][4]의 물리적 배치
– 이차원 배열이 실제로 컴퓨터 메모리에 저장되는 형식은 아래와 같
이 일차원 배열처럼 배치됨
a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
row 0 row 1 row 2
1000 1016 1032
7. Two-Dimensional Arrays
§ int a[3][4]의 물리적 배치
– int a[3][4] 가 1000번지에서 시작할 때 다음 값은?
7
a = ?
a + 1 = ?
a[0] = ?
a[0] + 1 = ?
a[1] = ?
a[1] + 1 = ?
a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
a[0] a[1] a[2]
1000 1016 1032
8. 8
Two-Dimensional Arrays
§ int a[3][4]의 물리적 배치
– a는 상수이며, type은 int (*)[4]
– a[0], a[1], a[2] 는 상수이며, type은 int*
a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
a[0] a[1] a[2]
1000 1016 1032
&a[0][0] ==a[0]==(int*)1000 &a[1][0]==a[1]==(int*)1016 &a[2][0]==a[2]==(int*)1032
a==&a[0]=(int**)1000 (a+1)==&a[1]=(int**)1016 (a+2)==&a[2]=(int**)1032
9. 9
Two-Dimensional Arrays
§ 2차원 배열 element를 access하는 여러 가지 방법
– a[ i ]는 a의 i번째 행
– a[ i ][ j ]는 배열의 i번째 행과 j번째 열의 원소
– 배열 이름 a는 &a[0]와 같다.
Expressions equivalent to a[ i ][ j ]
*( a[ i ] + j )
( *( a + i ) ) [ j ]
*( ( *( a + i ) ) + j )
*( &a[0][0] + 4 * i + j )
int a[3][4]
10. 10
Two-Dimensional Arrays
#include <stdio.h>
int main() {
int a[3][4], j, k, sum = 0 ;
for( j = 0 ; j < 3 ; j++ )
for( k = 0 ; k < 4 ; k++ )
scanf( “%d”, &a[j][k] ) ;
for( j = 0 ; j < 3 ; j++ )
for( k = 0 ; k < 4 ; k++ )
sum += a[j][k] ;
printf( “%dn”, sum ) ;
return 0;
}
§ 2차원배열을 함수에 넘기기
#include <stdio.h>
int sum(?????) { ... }
int main() {
int a[3][4], j, k, sum = 0 ;
for( j = 0 ; j < 3 ; j++ )
for( k = 0 ; k < 4 ; k++ )
scanf( “%d”, &a[j][k] ) ;
printf( “%dn”, sum(????) ) ;
return 0;
}
11. 11
Two-Dimensional Arrays
§ 2차원배열을 함수에 넘기기
int sum( int num[][4], int size )
{
for( j = 0 ; j < size ; j++ )
for( k = 0 ; k < 4 ; k++ )
sum += num[j][k] ;
}
printf( “%dn”, sum(a, 3) ) ;
int (*num)[4]
12. § 2차원배열을 함수에 넘기기
– 왜 이것은 안될까?
Two-Dimensional Arrays
12
int sum( int num[][], int size0, int size1 )
{
for( j = 0 ; j < size0 ; j++ )
for( k = 0 ; k < size1 ; k++ )
sum += num[j][k] ;
}
printf( “%dn”, sum(a, 3, 4) ) ;
int num[3][4] 일 때
num[i][j] 라고 쓰면, C compiler는 이것을 *(base_address + 4*i + j)로 변환한다.
(참고: C 언어 내부적으로 num[i][j]라는 표현은 존재하지 않음)
따라서, 두번째 크기인 4를 명시하지 않으면, num[i][j]를 *(base_address + 4*i + j)
로 변환할 수 없음.
13. Two-Dimensional Arrays
§ 2차원배열을 함수에 넘기기
– 그래도 굳이 그런 식으로 하고 싶다면,
– 2차원배열을 1차원배열로 형변환한 후
13
int sum( int num[], int size0, int size1 )
{
for( j = 0 ; j < size0 ; j++ )
for( k = 0 ; k < size1 ; k++ )
sum += *(num+ size1*j + k) ;
}
printf( “%dn”, sum( (int*)a, 3, 4) ) ;
14. 14
Multidimensional Arrays
§ 3차원배열을 함수에 넘기기
int sum( int num[][4][5], int size )
{
for( j = 0 ; j < size ; j++ )
for( k = 0 ; k < 4 ; k++ )
for( l = 0 ; l < 5 ; l++ )
sum += num[j][k][l] ;
}
printf( “%dn”, sum(a, 3) ) ;
int (*num)[4][5]
15. Multidimensional Arrays
§ 3차원배열을 함수에 넘기기
– 1차원 배열 포인터로 변환하여 넘기기
15
int sum( int num[], int s0, int s1, int s2 )
{
for( j = 0 ; j < s0 ; j++ )
for( k = 0 ; k < s1 ; k++ )
for( l = 0 ; l < s2 ; l++ )
sum += *(num+ s1*s2*j + s2*k + l) ;
}
printf( “%dn”, sum((int*)a, 3, 4, 5) ) ;