목록rust (50)
NeuroWhAI의 잡블로그
1장은 건너뛰고 책에서 미리 준비된 코드를 사용해서 진행하는 실습도 건너뛰었습니다. 남은건 퍼셉트론 뿐... 예제는 퍼셉트론으로 AND, OR, NAND 그리고 이를 조합하여 XOR 게이트를 구현한 코드입니다. 코드: use rulinalg::matrix::BaseMatrix; pub fn and_gate(x1: f32, x2: f32) -> f32 { let x = matrix![x1, x2]; let w = matrix![0.5, 0.5]; let b = -0.7; let out = x.elemul(&w).sum() + b; if out > 0.0 { 1.0 } else { 0.0 } } pub fn or_gate(x1: f32, x2: f32) -> f32 { let x = matrix![x1, x..
Rust에 익숙해질겸 '밑바닥 부터 시작하는 딥러닝' 책을 Rust로도 실습해서 올릴 생각입니다. 다만 본인도 Rust를 잘하는게 아니므로 Rust 공부용으로 보시진 말아주세요. 일단 되나 안되나 테스트 용도로 2장의 퍼셉트론 AND 게이트를 구현해본 코드입니다. 라이브러리는 'rulinalg'를 사용했습니다. 코드: #[macro_use] extern crate rulinalg; use rulinalg::matrix::{BaseMatrix, Matrix}; fn and_gate(x1: f32, x2: f32) -> f32 { let x = matrix![x1, x2]; let w = matrix![0.5, 0.5f32]; let b = -0.7; let out = x.elemul(&w).sum() + ..
공식 문서 : https://rustbyexample.com/std/result/question_mark.html Rust에는 Result라는 놈이 있는데 말 그대로 어떤 작업의 결과를 표현합니다. 성공했으면 Ok(결과 값), 실패했으면 Err(에러 값) 이렇게요. 때문에 Result에서 결과 값을 받아오려면 패턴 매칭을 사용하거나 unwrap 메소드를 써야하는데 이게 많아지면 보기가 안좋다고 합니다. 그래서 편의 문법으로 나온게 '?' 연산자입니다. 좀 다르겠지만 대충 아래와 같은 정의라고 보시면 됩니다. Result x를 받아서 Ok라면 그 안의 결과 값을 취하지만 Err라면 그 안의 에러 값을 반환합니다. 단순히 return err;가 아닌 이유는 에러간의 변환에 관한 유연성 때문인데 아래에 설명이..
C++처럼 알파벳 'r'로 나타내지만 구분문자열(? 아래 예시에서 '#'에 해당하는 문자열)은 괄호 없이 큰따옴표 밖에 위치합니다. r"foo" == "foo"r#""foo""# == "\"foo\"" https://doc.rust-lang.org/reference/tokens.html#raw-string-literals
공식 문서 : https://doc.rust-lang.org/std/primitive.str.html#method.matches 예시: 1234567891011121314fn count(value: &str, substr: &str) -> usize { value.matches(substr).count()} fn pick_num(value: &str) -> Vec { value.matches(char::is_numeric).collect()} fn main(){ println!("Count : {}", count("aabcd abaaz zaazxcaxa", "aa")); println!("Numbers : {:?}", pick_num("1a23bc4d"));} Colored by Color Scripte..
https://doc.rust-lang.org/std/primitive.str.html#method.matches 1 2 fn matches(&self, pat: P) -> Matches where P: Pattern cs 대충 이렇게 생긴 str에 있는 메소드 입니다. 입력으로는 Pattern을 받는데 일단 &str, char, 클로저를 넣을 수 있습니다. Pattern에 관해서는 나중에 공부해서 올려보겠습니다. Matches를 반환하는데 요놈이 Iterator를 구현하고 있으므로 결과를 다양하게 사용할 수 있습니다. 아래처럼 collect부터해서 count로 개수를 알수도 있고 각 값을 따로 처리할수도 있습니다. 1 2 3 4 5 let v: Vec = "abcXXXabcYYYabc".matches(..
Travis는 지속적 통합(CI)를 가능하게 해주는 빌드/테스트 자동화 시스템 입니다. 자신의 GitHub 레포를 등록하고 레포에 커밋이 발생하면 자동으로 빌드와 테스트를 수행해줍니다. 그리고 이런 뱃지도 제공해주죠. 이 글에서는 공식 문서를 참조하여 Travis에 Rust 프로젝트를 등록하고, 자동으로 빌드하게하고, 빌드 결과를 뱃지로 달아볼겁니다. 매우 간단합니다. 당연하지만 Travis에 가입해야겠죠. GitHub 계정으로 바로 로그인하시면 됩니다. 그럼 몇개의 권한을 달라고할테고 승인해주시면 자동으로 동기화가 됩니다. 다음은 Travis가 보여주는 자신의 레포 목록에서 등록을 원하는 레포를 체크해주시면 됩니다. 그리고 이제 Rust 프로젝트의 최상위 디렉토리에 ".travis.yml" 파일을 만들..
Rust 라이브러리인 Tokio를 배우려고 합니다. 일단 공식 홈페이지의 예제를 따라하고 있는데 아는거라곤 문법 뿐이더라고요 하하하하하 직접 하나씩 따라하고 싶으신 분은 아래 링크를 보시면 됩니다. 저는 영어가 안되서 힘들었..ㅠㅠ https://tokio.rs/docs/getting-started/futures/ 아래 코드는 Futures 라이브러리와 Tokio를 써서 숫자가 소수인지 아닌지를 비동기적으로 판별하는 코드입니다. 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 ..
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566use std::fmt; struct LinearFunction { a: f64, b: f64,} impl LinearFunction { fn new(a: f64, b: f64) -> LinearFunction { LinearFunction { a: a, b: b, } } fn feed(&self, x: f64) -> f64 { self.a * x + self.b } fn learn(&mut self, input: f64, target_output: f64, learning_rate: f..
https://ideone.com/30uZwT123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384use std::fmt;use std::iter; struct LinearFunctionIterator { fun: LinearFunction, x: i32, end: i32,} impl LinearFunctionIterator { fn new(fun: LinearFunction, begin: i32, end: i32) -> LinearFunctionIterator { Linear..