06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1],...

27
プログラミング実習I 人間システム工学科 井村 誠孝 [email protected] 06 配列(1)

Upload: others

Post on 24-Jan-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

プログラミング実習I

人間システム工学科井村誠孝

[email protected]

06 配列(1)

Page 2: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

配列

配列とは

同じ種類の変数を複数集めたもの

変数と配列

変数

値を保存しておける箱

配列

値を保存しておける箱(変数)の集合

箱全体に一つの名前がついている

箱を区別するために,箱には通し番号がついている

同じ性質の変数をまとめて扱うのに便利

一戸建て

長屋

p. 204

Page 3: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

a[0]

変数と配列

a

a[1] a[2] a[3] a[4]配列

変数

それぞれは変数(要素)

[]で添字を指定し個々の要素を区別

p. 204

Page 4: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

配列変数の定義

変数と同様,定義が必要.

要素数([]の中)は定数である必要がある(変数は不可).

int型の配列変数array[0], array[1], ..., array[4]が使用

可能になる.

要素数は5個

添字は0から始まる.

よって使えるのはarray[4]まで.array[5]は使用不可.

array[5]にアクセスしても,エラーにならないこともあり(少なく

とも,コンパイル時にはエラーは出ない),予期せぬ挙動の原因と

なる.

int array[5];

添字

p. 207

Page 5: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

配列の添字

添字: 括弧 [ ] の中の数字

要素: 配列の各データ部分(それぞれが変数)

N個の配列を宣言したときに,添字Nの要素は存在

しない

p. 210

配列の最初の要素は添字が0であり,最後の要素の添字は「配列の大きさ-1」である

a[0] a[1] a[2] a[N-1]int a[N]; ...

Page 6: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

配列変数の使用

変数が使える場所では,配列の要素を同じように

使える.

添字[]を付けるのを忘れないように.

配列の全ての要素を処理するときは,for文を使う.

N個の要素がある配列を使うときには,for文は以下のように書くのが一般的

for (i = 0; i < N; i++) {:

}

p. 213

Page 7: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

配列の使用例: 最大値を求める

int array[5] = {120, 80, 60, 180, 20};int max = 0;int i;

for (i = 0; i < 5; i++) {if (max < array[i]) {max = array[i];

}}

printf("max = %d¥n", max);

p. 213

Page 8: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

配列のコピー

配列全体に対する代入はできない.

for文を使って1要素ずつ代入する.

int a[3] = {1,2,3};

int b[3];

b = a; /* NG */

int a[3] = {1,2,3};

int b[3];

int i;

for (i = 0; i < 3; i++) {

b[i] = a[i];

}

p. 211

Page 9: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

配列の要素数とマクロ定数

配列の要素数はマクロ定数として定義する.

以下のプログラムは,配列bに配列aの各要素を3倍して

格納するものとする.データの個数が5個になったとき

の書き換え箇所を考えてみよう.

p. 225

int a[3] = {1,2,3};

int b[3];

int i;

for (i = 0; i < 3; i++) {

b[i] = 3 * a[i];

}

#define N 3

int a[N] = {1,2,3};

int b[N];

int i;

for (i = 0; i < N; i++) {

b[i] = 3 * a[i];

}

マクロなし マクロあり マクロ定数

Page 10: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

配列の初期化

通常の変数と同じように,要素に値を代入する.

定義した際に,まとめて初期化することもできる.

まとめて初期化する際には,要素数を省略できる.

要素数は与えた初期化定数の個数に等しい.

int a[3];

a[0] = 1;

a[1] = 2;

a[2] = 3;

int a[3] = {1, 2, 3};

int a[] = {1, 2, 3};

p. 236

Page 11: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

平均,分散,標準偏差

いずれも重要な統計量

1 2

1

1 nn

i

i

d d dm d

n n

2

1

1 n

i

i

v d mn

s v

平均

分散

標準偏差

p. 216

Page 12: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

おまけ: 平均・分散・標準偏差・偏差値

Page 13: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

統計処理

データ(観測値)が得られたときに,そのデータに

関する客観的な数値情報を示したい

観測値

データ数

Nxxx ,,, 21

N

Page 14: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

代表値

代表値 average

データの分布を代表する数値

主要な代表値

平均(算術平均,相加平均) mean

他の平均: 幾何平均(相乗平均)・調和平均

メディアン(中央値) median

分位点

第1四分位点…

モード(最頻値) mode

Page 15: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

(いわゆる)平均

観測値の和をデータの個数で割ったもの

正確には算術平均(arithmetic mean)

N

i

iN x

NN

xxxx

1

21 1

Page 16: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

その他の平均

幾何平均 geometric mean

調和平均 harmonic mean

1 2

1

N

N NG N i

i

x x x x x

11 2

1 1 1 1 1 1 1N

iH N ix N x x x N x

Page 17: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

中央値(メディアン)

観測値を大きさの順に並べ替えたときの中央の値

N: 奇数のとき

N = 2M + 1 とすると

N: 偶数のとき

N = 2M とすると

Nxxx ,,, 21 Nsss xxx ,,,

21

1Msx

2/)(1

MM ss xx

)(21 Nsss xxx

Page 18: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

最頻値(モード)

最も頻繁に出現する値

注意: 二つ以上出現する場合がある(双峰型の分布など)

Page 19: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

代表値が同じ事例

いずれも

(算術)平均 = 中央値 = 最頻値 = 70

しかし,データの広がる範囲は異なる

データの散らばりを表現できる指標が必要

1) 50, 70, 70, 70, 70, 70, 70, 70, 70, 90

2) 50, 55, 60, 65, 70, 70, 75, 80, 85, 90

3) 40, 60, 65, 70, 70, 70, 70, 75, 80, 100

Page 20: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

散らばりの指標: 分散と標準偏差

偏差 deviation

各観測値 xiと平均 との隔たり

分散 variance

偏差の2乗平均

標準偏差 standard deviation

分散の平方根

観測値と単位が同じ

x

2

22 2

1 1 1

1 1 1N N N

i i i

i i i

s x x x xN N N

2s s

二乗の平均から平均の二乗を引く

Page 21: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

分散の実例

観測値 平均 分散 標準偏差

1 70 80 8.94

2 70 150 12.25

3 70 205 14.32

1) 50, 70, 70, 70, 70, 70, 70, 70, 70, 90

2) 50, 55, 60, 65, 70, 70, 75, 80, 85, 90

3) 40, 60, 65, 70, 70, 70, 70, 75, 80, 100

Page 22: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

標準化: 各データの値を,そのデータが属する分

布の平均と標準偏差を用いて一次変換

標準化の方法: x (標準化前)→ z (標準化後)

標準化

z ax b

異なるデータ間の数値を直接比較したい例: 異なる試験の点数の比較

1,

xa b

s s

Page 23: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

一次変換による平均と分散の変化

データをa倍してbを加える

このときの平均と分散の変化

22

1

2

1

22

1

2 2

1

1

1

N

z i

i

N

i

i

N

i

i

s z zN

ax b ax bN

a x xN

a s

1

1

1 1

1

1

1 11

N

i

i

N

i

i

N N

i

i i

z zN

ax bN

a x bN N

ax b

z ax b

Page 24: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

標準化後の平均と分散

で行うので

標準化後の平均と分散

bxaz 2 2 2

zs a s zs a s

1,

xa b

s s

20, 1, 1z zz s s

平均を0,分散を1にすることで,異なるデータ間の数値が直接比較可能になる

Page 25: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

標準化の例

二つの異なる試験の点数を比較する.

数学の試験(平均点53,標準偏差22.7)で73点

物理の試験(平均点53,標準偏差18.3)で73点

標準得点を求めてみる.

数学

物理

よって,平均は同じ53点で,同じように73点を取って

も,物理の73点の方が数学の73点より価値がある.

73 530.88

22.7

73 531.09

18.3

Page 26: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

偏差値

標準化されたデータに対し,以下の変換を行った

ものが偏差値.

Q. 偏差値の取り得る値の範囲は規定されている

か? 100を越える偏差値はありうるか?

5010 ii zT

50, 10TT s

Page 27: 06 配列(1) - 関西学院大学imura/prog1/06-1-array.pdfint型の配列変数array[0], array[1], ..., array[4]が使用 可能になる. 要素数は5個 添字は0から始まる.

講義ウェブサイト: http://ist.ksc.kwansei.ac.jp/prog1/

偏差値が100を越える例

平均点40点,標準偏差が10の試験で100点を取り

ました.

標準得点

偏差値

100 406

10z

10 50 110T z