안녕하세요, 프로그래밍 커뮤니티 '코드앤톡스' 완장으로 활동중인 바보털입니다.

얼마 전에 이곳을 알게 되어서 눈팅도 좀 하고 글도 몇 번 써보았는데, 프갤분들과는 다르게 다들 프로그래밍에 대한 조예도 깊고 관심도 많으신것 같아 존경스럽습니다. 특히 Rust에 대한 애정이 넘치시는 것 같은데, 맞나요? ㅎㅎ

다름이 아니고, 저도 얼마 전에 Rust를 공부하기 시작했는데, 이게 참 남들한테 영업을 하고 싶어지는 묘한 언어입니다. 그래서 저도 코드앤톡스 회원분들께 영업을 하고 있는데, 아직 실력이 미숙해서 쉽지 않네요. 그래서, Github갤 분들께서 코드앤톡스에 오셔서 Rust 영업을 좀 도와주셨으면... 하고 이 글을 쓰게 되었습니다.


물론 Rust가 아니라도 프로그래밍에 관련된 이야기를 나누고 싶으신 분, 코드 리뷰를 받고 싶으신 분, 코드 자랑을 하고 싶으신 분, 프로그래밍 과제를 날먹하시려는 분 모두 환영합니다.


이거 글을 어떻게 끝내야 할지 잘 모르겠네요. 코드앤톡스 링크와 오늘 공부한 러스트 코드 놓고 가겠습니다. 혹시 광고라 문제가 된다면 지우겠습니다. 감사합니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
type Real = f64;
type Matrix< T > = Vec< Vec< T > >;
 
struct Nya {
    size: usize,
    count: usize,
    e1: Vec< Real >,
    e2: Matrix< Real >
}
 
impl Nya {
    pub fn new(size: usize) -> Self {
        Nya {
            size,
            count: 0,
            e1: vec![0.0size],
            e2: vec![vec![0.0size]; size]
        }
    }
 
    fn put(&mut self, val: &[Real]) -> &mut Self {
        for i in 0..self.size {
            self.e1[ i ] += val[ i ];
 
            for j in 0..self.size {
                self.e2[ i ][ j ] += val[ i ] * val[ j ];
            }
        }
 
        self.count += 1;
        self
    }
 
    fn mean(&self, val: usize) -> Real {
        self.e1[ val ] / self.count as Real
    }
 
    fn cov(&self, v1: usize, v2: usize) -> Real {
        (self.e2[ v1 ][ v2 ] - self.e1[ v1 ] * self.e1[ v2 ] / self.count as Real) / self.count as Real
    }
 
    fn cov_matrix(&self) -> Matrix< Real > {
        let mut ret = vec![vec![0.0; self.size]; self.size];
 
        for i in 0..self.size {
            for j in 0..self.size {
                ret[ i ][ j ] = self.cov(i, j);
            }
        }
 
        ret
    }
 
    fn cor(&self, v1: usize, v2: usize) -> Real {
        self.cov(v1, v2) / (self.var(v1) * self.var(v2)).sqrt()
    }
 
    fn var(&self, val: usize) -> Real {
        self.cov(val, val)
    }
 
    fn std(&self, val: usize) -> Real {
        self.var(val).sqrt()
    }
}
 
fn main() {
    let mut nya = Nya::new(2);
 
    nya.put(&[- 6.0- 7.0])
       .put(&[  8.0- 5.0])
       .put(&[- 4.0,   7.0])
       .put(&10.0,   9.0]);
 
    println!("E(X1) = {}", nya.mean(0));
    println!("V(X1) = {}", nya.var(0));
    println!("E(X2) = {}", nya.mean(1));
    println!("V(X2) = {}", nya.var(1));
    println!("COV(X1, X2) = {}", nya.cov(01));
    println!("COR(X1, X2) = {}", nya.cor(01));
 
    for i in 0..nya.size {
        for j in 0..nya.size {
            print!("{} ", nya.cov_matrix()[ i ][ j ]);
        }
 
        print!("\n");
    }
}
cs


https://www.codentalks.com/