旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【Python】 リストから一つおきにデータを取り出す

書籍”Effective Python”項目6のメモです。Pythonを始めて半年経ちますが、真面目に言語自体の勉強をしていなかったので空き時間使ってまだ知らなかった事のメモをします。

サンプリングレートが高すぎるセンサのデータ数を減らしたいことがあったので、このような時に使えそうです。

a = [1,2,3,4,5,6,7,8,9,10]
# b = [1,3,5,7,9]
b = a[::2]

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

【Python】 リストのコピー方法

書籍”Effective Python”項目5のメモです。Pythonを始めて半年経ちますが、真面目に言語自体の勉強をしていなかったので空き時間使ってまだ知らなかった事のメモをします。

リストのスライスの時に添え字startとendを省略するとコピーになる。

a = [1, 2, 3, 4]
# これだと参照。aを変更するとbも変更される
b = a

# これだとコピー。bはaの変更の影響を受けない
b = a[:]

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

【Python】 PEP8スタイルガイドに従う

書籍”Effective Python”項目2のメモです。Pythonを始めて半年経ちますが、真面目に言語自体の勉強をしていなかったので空き時間使ってまだ知らなかった事のメモをします。

名前付けの規約

  • 関数、変数、属性 ⇒ lowercase_underscore

  • protected属性 ⇒ _leading_underscore

  • private属性 ⇒ __double_underscore

  • クラス、例外 ⇒ CapitalizedWord

  • モジュールレベルの定数 ⇒ ALL_CAPS

式と文の規約

  • インポートの順番は、標準ライブラリモジュール、サードパーティーのモジュール、自分のモジュールの順番に行う。各モジュールはアルファベット順にインポートする

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

【WPF】 OxyPlotでグラフを描画する簡単な例

WPFでグラフを描きたい時はOxyPlotを利用しているのですが、頻繁に使うわけでもないため、使う度に同じことを調べる事態になってしまっています。そのため、OxyPlotの使い方に関する単純な例をメモしておきます。

1. NuGetからOxyPlot.Wpfをインストールする

2. (XAML)Windowにoxyを追加する & GridにPlotを追加する

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Test"
        mc:Ignorable="d"
        xmlns:oxy="http://oxyplot.org/wpf"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <oxy:Plot Name="PlotExample" Title="Example">
            <oxy:Plot.Series>
                <oxy:LineSeries/>
            </oxy:Plot.Series>
        </oxy:Plot>        
    </Grid>
</Window>

3. Axisを定義し、データをセットする

// これらのusingが必要
using OxyPlot;
using OxyPlot.Wpf;


// X軸の定義
LinearAxis xAxis = new LinearAxis
{
    Position = OxyPlot.Axes.AxisPosition.Bottom,
    Title = "x",
    Unit = "x unit"
};
PlotExample.Axes.Add(xAxis);

// Y軸の定義
LinearAxis yAxis = new LinearAxis
{
    Position = OxyPlot.Axes.AxisPosition.Left,
    Title = "y",
    Unit = "y unit"
};
PlotExample.Axes.Add(yAxis);

// ItemsSourceにデータをセットする
var points = new List<DataPoint>() { new DataPoint(0.0, 1.0), new DataPoint(1.0, 2.0), new DataPoint(2.0, 3.0) };
PlotExample.Series[0].ItemsSource = points;
// Plotを更新する
PlotExample.InvalidatePlot();


f:id:ni4muraano:20170715160706p:plain

【C#】 C#からDOSコマンドでPythonスクリプトを呼び出す

C#からPythonを呼び出す方法はいくつかあるようで、IronPythonを利用する方法がまずヒットしたのですが、IronPythonではサポートされていないライブラリを利用したスクリプトを呼び出したいと考えています。そのため、こちら(DOSコマンドを実行し出力データを取得する: .NET Tips: C#, VB.NET)の方法を利用してみることにしました。

// プロセスクラスのインスタンス化
var p = new Process();

// cmd.exeのパスを取得
p.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
// 出力を読み取れるようにする
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = false;
// ウインドウを表示しないようにする
p.StartInfo.CreateNoWindow = true;
// hello.pyを実行する(ファイルにはprint('Hello')と書かれている)
p.StartInfo.Arguments = @"/c python hello.py";

// 起動
p.Start();

// 出力を読み取る
string result = p.StandardOutput.ReadToEnd();

// プロセス終了まで待機する
p.WaitForExit();
p.Close();

// コンソールにHelloと表示される
Console.WriteLine(result);