Keita_Nakamoriです。
Sklearnの重回帰 LiniearRegression を使ってみようと思います。
自動車の価格をダウンロードしゴミデータの削除とスケーリング(標準化)した後、重回帰分析でピックアップした特徴量から価格を予測するという内容になります。
data_scientist_chapter_8_LinearRegression
東洋インタレスト出版
Keita_Nakamoriです。
Sklearnの重回帰 LiniearRegression を使ってみようと思います。
自動車の価格をダウンロードしゴミデータの削除とスケーリング(標準化)した後、重回帰分析でピックアップした特徴量から価格を予測するという内容になります。
data_scientist_chapter_8_LinearRegression
こんにちはKeita_Nakamoriです。
今日はmatplotlibを少しやりました。棒グラフ 円グラフ バブルチャート ですが、私はあまり使わないですね。
次回から機械学習に入りますので、いよいよ本番だと思って気合入れていきます。
今回は結構むずい クォータニオンの話です。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TestRotation : MonoBehaviour{ void Update() { //マウスをクリクしたらトルクをかける if (Input.GetMouseButtonDown(0)) { //リジッドボディをとってくる var cube = GetComponent<Rigidbody>(); // トルクの成分を定義 ではなくて //var torque = new Vector3(0f, 1f, 0f); // 角速度を定義する var omega = new Vector3(0f, 1f, 0f); var R = transform.rotation; var RI = Quaternion.Inverse(transform.rotation); // T = I * omega // T =Ir Id IrI * omega var Id = cube.inertiaTensor; var Ir = cube.inertiaTensorRotation; var IrI = Quaternion.Inverse(Ir); var torque = R * Ir * Vector3.Scale(Id, IrI * RI * omega); // トルクを与える関数を使用する cube.AddTorque(torque, ForceMode.Impulse); } } } |
オブジェクトをくるくる回してみます。
インスペクターから回転速度を調整できるようにpublic としてspeedを定義します。
ステップはconst で定義しておきます。
左クリックを検出するために if (Input.GetMouseButton(0))します。
今回はUnity標準のrigidbodyを使わせていただきます。
角速度はアトリビュートangularVelocityに格納されているのでこれをいじります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Rotation2 : MonoBehaviour { public float speed = 1; const float df = 1f / 60f; void FixedUpdate() { //左クリックが押されたら if (Input.GetMouseButton(0)) { //リジッドボディを取得する Rigidbody rigidbody = GetComponent<Rigidbody>(); //角速度を定義する rigidbody.angularVelocity = new Vector3(0f, speed,0f); } } } |
今日は、Unityを使って簡単な物理計算をやってみようと思います。
跳ねるボールを作ってみます。
Unity上で球を上空へ配置した状態で、下記のスクリプトをアタッチします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { void FixedUpdate() { //コンポーネントにつけたリジッドボディをとってきて変数rbに代入する var rb = GetComponent<MyRigidbody>(); //変数rbに力を加える rb.AddForce(new Vector3(0f, -9.8f, 0f)); } } |
ゲットコンポーネントしますがUnityのrigidbodyは使用せずにMyRigidbodyというスクリプトを自分で定義します。
MyRigidbodyの中では加速度 速度 位置について時間ごとの計算を行います。
後に次のスクリプトでAddForceメソドを定義しますが、これで任意の方向に力を加えることができます。ここでは重力加速度になるようにy = -9.8としました。
通常のrigidbodyでgravityを定義できますが、今回はなるべく自分で定義していくことをコンセプトとしています。
球にアタッチする2つ目のスクリプトとしてMyRigidbodyを定義します。
加速度 速度 位置の変数をVector3型で用意します。
ステップ幅を1/60sとします。ここを1/600とすると 1/10スローモーションとして演算できます。
初期化のところでは、オブジェクトのtrasform.positionを取得するだけです。
AddForceメソドをpublicとして定義します。1つ目のスクリプトで読み込めるようにするためです。
で、引数として forceを入れます。さっきのVector3 (0f,-9.8f,0f)ですね。
このforceはaccelerationに加算されます。初期ステップ目では -9.8m/s2ということです。
1ステップ更新すると、このaccelerationに対して時間dt=1/60s を掛け算した値であるvelocityが計算され、さらにそのvelocityに時間dtを掛け算した変位(1ステップの移動量)positionが計算されます。
これでpositionはどんどん下がっていくので、床と衝突します。
衝突は、オブジェクトの中心座標分だけ床から浮いた状態を床との接触状態と考えてif文で検知したら速度を反転させ跳ね返るようにします。
最後にaccelerrationはゼロに初期化して、次のステップで再定義されるための準備をします。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MyRigidbody : MonoBehaviour { // 加速度 速度 位置の変数ベクトルを定義 Vector3 acceleration; Vector3 velocity; Vector3 position; // 微小時間を定義 const float dt = 1f/60f; // 初期化 void Start() { //オブジェクトの位置を変数ベクトルpositionに持ってくる position = transform.position; } // スクリプトtestで使用する関数AddForceを定義する public void AddForce(Vector3 force) { acceleration += force; } // 更新 void FixedUpdate() { //加速度から速度と位置を計算する velocity += acceleration * dt; position += velocity * dt; // position.y がオブジェクトの半径以下になったら速度を反転させる if (position.y < 0.50f) { velocity = - velocity; Debug.Log("反転しました"); } // オブジェクトの位置を更新する transform.position = position; //加速度は位置の更新が終わったらゼロクリアしておくこと acceleration = Vector3.zero; } } |
こんにちはKeita_Nakamoriです。
Scipyのおさらいをしました。
科学技術用モジュールというだけあって、
補間 スプライン補間 interplate linalg
特異値分解 LU分解 コレスキー分解
数値積分 微分方程式 integrate
最適化 二分法 ブレント法 ニュートン法 optimize
高速フーリエ変換 信号処理 画像処理
などなど、盛りだくさんです。
線形代数関係は、さっぱりなところもありましたので、必要になったときに再び掘り下げて学習しなおそうと思います。
こんにちは Keita_Nakamorです。
Numpyをおさらいしました。
pythonに慣れている人であればNumpyは普段から使用するのでサラッと流す程度で良いでしょう。
data_scientist_chapter_5_numpy
こんにちはKeita_Nakamoriです。
データサイエンティスト育成講座、連休のおかげで久々に手がつけられました。
主に確率分布、推定、検定の話でした。苦手な分野なので地道に理解しながら牛歩のごとく進めました。
次回は再びNumpyやらPandasの使い方になるのでさらっと行けたら良いなと思います。
こんにちはKeita_Nakamoriです(^o^)
小学生向けにPythonの学習用にとJetson Nanoを久々に引っ張り出して有効活用しようと思いつきました。
Linux用のAnaconda3をイントールしようとしましたが無理なようなのであきらめてVScodeをインストールしようと思います。
まじめにやるならVScode本体をビルドしてからインストールしますが、下手をすると1時間くらいかかるので今回はビルド済みのパッケージをダウンロードしてインストールしました。
curlを使用するので
$sudo apt-get install curl
してから
$curl -L https://github.com/toolboc/vscode/releases/download/1.32.3/code-oss_1.32.3-arm64.deb -o code-oss_1.32.3-arm64.deb
そして
$sudo dpkg -i code-oss_1.32.3-arm64.deb
VScodeを立ち上げてみます。
$code-oss
インストールしたてのときはメニューがないので表示するための設定をします
Restartするよう警告がでるの、Restartボタンをクリックする。
これでメニューバーが追加されたはずです。
左端にあるExtensions でpythonをインストールします。
pylintも入れたいですが、現状ではpip3すら入っていない状態ですので入れます。
$sudo apt install python-pip python3-pip
$pip3 install pylint
これで VScodeでpython開発ができます。\(^o^)/