« 2019年12月 | トップページ | 2020年2月 »

2020年1月19日 (日)

[R]計算で扱うことができる実数(浮動小数点)の最大値と最小値

.Machine定数のdouble.xmaxに格納されている。以下はWindowsの64ビット版Rで動作させた例。

> .Machine$double.xmax
[1] 1.797693e+308

正値、負値ともに、この値を超えた数値は扱うことができない。

> 1.797693e+308
[1] 1.797693e+308
> 1.797694e+308
[1] Inf
> -1.797693e+308
[1] -1.797693e+308
> -1.797694e+308
[1] -Inf

2020年1月10日 (金)

[R]ベクトルの最初(最後)の要素だけを取り除く

head関数もしくはtail関数を使う。これらの関数は、それぞれ最初、最後から第2引数に指定した数だけの要素を返す関数だが、この第2引数に負数を指定すると、まったく逆の動作(反対側の端から指定した数の要素を含まない要素を返す)をする。

最初の要素だけを取り除く場合はtail関数の第2引数に-1を、最後の要素だけを取り除くにはhead関数の第2引数に-1を指定すればよい。

> n <- c(1, 2, 3, 4, 5, 6, 7)
> tail(n, -1)
[1] 2 3 4 5 6 7
> head(n, -1)
[1] 1 2 3 4 5 6

これを応用すると、最初(最後)から任意の数の要素を取り除いたベクトルを簡単に作成することができる。

> n <- c(1, 2, 3, 4, 5, 6, 7)
> head(n, 3)
[1] 1 2 3
> head(n, -3)
[1] 1 2 3 4
> tail(n, 2)
[1] 6 7
> tail(n, -2)
[1] 3 4 5 6 7

2020年1月 7日 (火)

[C#]文字列を数値に変換できるか否か確認する

TryParseメソッドを使用する。以下は、double(倍精度浮動小数点数)を使用した例。Double構造体はSystem名前空間に含まれていることから、using System;が事前に必要であることに注意。

TryParseメソッドは変換できるか否かを論理値(TrueかFalse)で返す。引数には、変換候補の文字列と、変換された場合の代入先の変数の2つを指定する必要がある。もし、変換できない場合は、後者の変数には0が代入される。下記の例では、事前にdouble d;としている。

Console.WriteLine(Double.TryParse("-123", out d));
Console.WriteLine(d);
Console.WriteLine(Double.TryParse("+1.23", out d));
Console.WriteLine(d);
Console.WriteLine(Double.TryParse(" 1.23 ", out d));
Console.WriteLine(d);
Console.WriteLine(Double.TryParse("+1.2.3", out d));
Console.WriteLine(d);
Console.WriteLine(Double.TryParse("1.2a", out d));
Console.WriteLine(d);

出力

True
-123
True
1.23
True
1.23
False
0
False
0

正負の記号は識別する。文字列の前後に空白があっても変換される。小数点が2つあったり英字が含まれる場合は変換されない。

2020年1月 5日 (日)

[C#]文字列の長さをバイト単位で得る

EncodingクラスのGetByteCountクラスを使う。

System.Text.Encoding sjis =
System.Text.Encoding.GetEncoding("shift_jis");
Console.WriteLine("ABC".Length);
Console.WriteLine("あい".Length);
Console.WriteLine("ABあいう".Length);
Console.WriteLine(sjis.GetByteCount("ABC"));
Console.WriteLine(sjis.GetByteCount("あい"));
Console.WriteLine(sjis.GetByteCount("ABあいう"));

出力結果

3
2
5
3
4
8

C#は文字列の文字コードに、すべての文字を2バイトで表現するUnicodeを使っている。一方でMS-DOS時代は、いわゆる半角文字(上記の例では「A」や「B」)は1バイトで、全角文字(上記の例では「あ」や「い」)は2バイトで文字を表現していた。そのため、文字列の文字コードにシフトJIS(shift_jis)を指定して、何バイトか調べれば、文字列の長さをバイト単位で得ることができる。

2020年1月 2日 (木)

[Python]NumPyのndarray型(行列)から任意の列のみ抜き出す

:(コロン)と,(カンマ)を組み合わせて指定をする。以下は、それぞれ1列目、2列目のみを抜き出した例。

>>> import numpy as np
>>> d = np.array([[1, 2, 3], [4, 5, 6]])
>>> d
array([[1, 2, 3],
[4, 5, 6]])
>>> d1 = d[:, 0]
>>> d2 = d[:, 1]
>>> print(d1)
[1 4]
>>> print(d2)
[2 5]

 

« 2019年12月 | トップページ | 2020年2月 »

無料ブログはココログ

■■

■■■