Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
データ解析の基礎
           配列




2008年8月,データ解析の基礎,加藤,瀬々,金子.   1
目標

• 配列を理解する
  –   配列は多数のデータを表すのに便利
  –   データ群から統計量を求めよう
  –   配列に一気に数値を代入する方法
  –   メソッドに配列を渡すには


• 2次元配列を理解する




 200...
べき乗の合計のプログラムをもっと汎用的に

     Test07a.java

public class Test07a {
  public static void main( String[] args ){
    int a, b, ...
配列を使って汎用的に
                 べき乗の合計を求める
                                                        int[] 型
public class Test07...
どのように計算されているのか
                 べき乗の合計を求める
public class Test07b {
  public static void main( String[] args ){
    int[] a;...
どのように計算されているのか

Test07b.java     べき乗の合計を求める
public class Test07b {
  public static void main( String[] args ){
    int[] a...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                             スタック          メモリの一部
public class Test07b {       ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック      メモリの一部
public class Test07b {              ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック          メモリの一部
public class Test07b {          ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック          メモリの一部
public class Test07b {          ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック          メモリの一部
public class Test07b {          ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック          メモリの一部
public class Test07b {          ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック          メモリの一部
public class Test07b {          ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック          メモリの一部
public class Test07b {          ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック           メモリの一部
public class Test07b {         ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック           メモリの一部
public class Test07b {         ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック           メモリの一部
public class Test07b {         ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック            メモリの一部
public class Test07b {        ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック            メモリの一部
public class Test07b {        ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック            メモリの一部
public class Test07b {        ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック            メモリの一部
public class Test07b {        ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック            メモリの一部
public class Test07b {        ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック            メモリの一部
public class Test07b {        ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック            メモリの一部
public class Test07b {        ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック            メモリの一部
public class Test07b {        ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック            メモリの一部
public class Test07b {        ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック            メモリの一部
public class Test07b {        ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック            メモリの一部
public class Test07b {        ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック            メモリの一部
public class Test07b {        ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック            メモリの一部
public class Test07b {        ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック            メモリの一部
public class Test07b {        ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック           メモリの一部
public class Test07b {         ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック            メモリの一部
public class Test07b {        ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック            メモリの一部
public class Test07b {        ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック           メモリの一部
public class Test07b {         ...
どのように計算されているのか

Test07b.java     べき乗の合計を求める                          スタック           メモリの一部
public class Test07b {         ...
練習7-b.

Test07b.java     プロジェクト名: test07
public class Test07b {
  public static void main( String[] args ){
              ...
配列のまとめ

int型配列    int[]
double型配列 double[]

配列の領域確保
 double[] x;
 x = new double[3];




     x       配列は参照型          a.le...
目標

• 配列を理解する
  –   配列は多数のデータを表すのに便利
  –   データ群から統計量を求めよう
  –   配列に一気に数値を代入する方法
  –   メソッドに配列を渡すには


• 2次元配列を理解する




 200...
数値データ群の統計量を計算してみよう
                       遺伝子ネットワークの場合
• 統計量の例
  – 合計
  – 平均
  – 最大値,最小値



    ネットワークの性質を調べたい

    数値データ
...
数値データ群の統計量を計算してみよう
                       遺伝子ネットワークの場合
• 統計量の例
  – 合計
  – 平均
  – 最大値,最小値



    ネットワークの性質を調べたい

    数値データ
...
数値データ群の統計量を計算してみよう
                       遺伝子ネットワークの場合
• 統計量の例
  – 合計
  – 平均
  – 最大値,最小値



    ネットワークの性質を調べたい

    数値データ
...
数値データ群の統計量を計算してみよう
                       遺伝子ネットワークの場合
• 統計量の例
  – 合計
  – 平均
  – 最大値,最小値



    ネットワークの性質を調べたい

    数値データ
...
配列データの最大値を探すには
                     配列データ中,最大の数値を見つけるプログラム
Test07c.java

public class Test07c {                           ...
最大値計算の過程

Test07c.java
                                                      スタック      メモリの一部
public class Test07c {      ...
最大値計算の過程

Test07c.java
                                                      スタック           メモリの一部
public class Test07c { ...
最大値計算の過程

Test07c.java
                                                      スタック          メモリの一部
public class Test07c {  ...
最大値計算の過程

Test07c.java
                                                      スタック           メモリの一部
public class Test07c { ...
最大値計算の過程

Test07c.java
                                                      スタック           メモリの一部
public class Test07c { ...
最大値計算の過程

Test07c.java
                                                      スタック           メモリの一部
public class Test07c { ...
最大値計算の過程

Test07c.java
                                                      スタック           メモリの一部
public class Test07c { ...
最大値計算の過程

Test07c.java
                                                      スタック          メモリの一部
public class Test07c {  ...
最大値計算の過程

Test07c.java
                                                      スタック          メモリの一部
public class Test07c {  ...
最大値計算の過程

Test07c.java
                                                      スタック          メモリの一部
public class Test07c {  ...
最大値計算の過程

Test07c.java
                                                      スタック          メモリの一部
public class Test07c {  ...
最大値計算の過程

Test07c.java
                                                      スタック          メモリの一部
public class Test07c {  ...
最大値計算の過程

Test07c.java
                                                      スタック          メモリの一部
public class Test07c {  ...
最大値計算の過程

Test07c.java
                                                      スタック          メモリの一部
public class Test07c {  ...
最大値計算の過程

Test07c.java
                                                      スタック          メモリの一部
public class Test07c {  ...
最大値計算の過程

Test07c.java
                                                      スタック          メモリの一部
public class Test07c {  ...
最大値計算の過程

Test07c.java
                                                      スタック          メモリの一部
public class Test07c {  ...
最大値計算の過程

Test07c.java
                                                      スタック          メモリの一部
public class Test07c {  ...
練習7-c.

Test07c.java       プロジェクト名: test07
public class Test07c {
  public static void main( String[] args ){
            ...
練習7-d.

Test07d.java       プロジェクト名: test07
public class Test07c {
  public static void main( String[] args ){
            ...
練習7-e.

Test07e.java       プロジェクト名: test07             このプログラムは最小値
                                               を求め,何番目の...
練習7-e0.

Test07e0.java      プロジェクト名: test07                このプログラムは最大値
                                                  を...
目標

• 配列を理解する
  –   配列は多数のデータを表すのに便利
  –   データ群から統計量を求めよう
  –   配列に一気に数値を代入する方法
  –   メソッドに配列を渡すには


• 2次元配列を理解する




 200...
最小値計算プログラム再考

Test07d.java       プロジェクト名: test07
public class Test07f {                         下の2つのコードは等価
  public stati...
「配列の初期化」を使うと2行が1行に

Test07f.java       プロジェクト名: test07
public class Test07f {
  public static void main( String[] args ){
...
目標

• 配列を理解する
  –   配列は多数のデータを表すのに便利
  –   データ群から統計量を求めよう
  –   配列に一気に数値を代入する方法
  –   メソッドに配列を渡すには


• 2次元配列を理解する




 200...
最小値計算部分をメソッドに

                  プロジェクト名: test07
Test07g.java

 public class Test07g {
   public static void main( String[...
どのように計算されているか

                  プロジェクト名: test07              スタック      メモリの一部
Test07g.java
                              ...
どのように計算されているか

                  プロジェクト名: test07              スタック          メモリの一部
Test07g.java
                          ...
min(a)を呼び出す
 すると新たなスタックフレームが作られる

                  プロジェクト名: test07              スタック          メモリの一部
Test07g.java
       ...
どのように計算されているか

                  プロジェクト名: test07              スタック          メモリの一部
Test07g.java
                          ...
どのように計算されているか

                  プロジェクト名: test07              スタック          メモリの一部
Test07g.java
                          ...
どのように計算されているか

                  プロジェクト名: test07              スタック          メモリの一部
Test07g.java
                          ...
どのように計算されているか

                  プロジェクト名: test07              スタック          メモリの一部
Test07g.java
                          ...
どのように計算されているか

                  プロジェクト名: test07              スタック          メモリの一部
Test07g.java
                          ...
どのように計算されているか

                  プロジェクト名: test07              スタック          メモリの一部
Test07g.java
                          ...
どのように計算されているか

                  プロジェクト名: test07              スタック          メモリの一部
Test07g.java
                          ...
どのように計算されているか

                  プロジェクト名: test07              スタック          メモリの一部
Test07g.java
                          ...
どのように計算されているか

                  プロジェクト名: test07              スタック          メモリの一部
Test07g.java
                          ...
どのように計算されているか

                  プロジェクト名: test07              スタック          メモリの一部
Test07g.java
                          ...
Ohp Seijoen H20 05 Hairetsu
Ohp Seijoen H20 05 Hairetsu
Ohp Seijoen H20 05 Hairetsu
Ohp Seijoen H20 05 Hairetsu
Ohp Seijoen H20 05 Hairetsu
Ohp Seijoen H20 05 Hairetsu
Ohp Seijoen H20 05 Hairetsu
Ohp Seijoen H20 05 Hairetsu
Ohp Seijoen H20 05 Hairetsu
Ohp Seijoen H20 05 Hairetsu
Ohp Seijoen H20 05 Hairetsu
Ohp Seijoen H20 05 Hairetsu
Ohp Seijoen H20 05 Hairetsu
Ohp Seijoen H20 05 Hairetsu
Ohp Seijoen H20 05 Hairetsu
Ohp Seijoen H20 05 Hairetsu
Ohp Seijoen H20 05 Hairetsu
Upcoming SlideShare
Loading in …5
×

Ohp Seijoen H20 05 Hairetsu

1,078 views

Published on

Published in: Education, Technology
  • Be the first to comment

  • Be the first to like this

Ohp Seijoen H20 05 Hairetsu

  1. 1. データ解析の基礎 配列 2008年8月,データ解析の基礎,加藤,瀬々,金子. 1
  2. 2. 目標 • 配列を理解する – 配列は多数のデータを表すのに便利 – データ群から統計量を求めよう – 配列に一気に数値を代入する方法 – メソッドに配列を渡すには • 2次元配列を理解する 2008年8月,データ解析の基礎,加藤,瀬々,金子. 2
  3. 3. べき乗の合計のプログラムをもっと汎用的に Test07a.java public class Test07a { public static void main( String[] args ){ int a, b, c, d, e, f, n; int pow_a, pow_b, pow_c, pow_d, pow_e, pow_f; int sum; n = 3; a = 3; b = 7; c = 4; d = 5; e = 9; f = 1; } sum = pow_a+pow_b+pow_c+pow_d+pow_e+pow_f; System.out.println(“sum=“+sum); } pow_a = power(a,n); pow_b = power(b,n); pow_c = power(c,n); pow_d = power(d,n); pow_e = power(e,n); pow_f = power(f,n); どこかで 書き間違えそう public static int power( int x, int n ){ int i, ret; データ数を ret = 1; for ( i = 0; i < n; i++ ){ 10000個もあったら ret = ret * x; どうする? } return ret; } } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 3
  4. 4. 配列を使って汎用的に べき乗の合計を求める int[] 型 public class Test07b { int 配列を参照する型. public static void main( String[] args ){ int[] a; 配列は複数の値を int[] pow_a; int i, n, sum; 格納できる. n = 3; 長さ6の配列を生成 番号でアクセスできる a = new int[6]; a[0]=3; a[1]=7; a[2]=4; a[3]=5; a[4]=9; a[5]=1; pow_a = new int[a.length]; a for ( i = 0; i < a.length; i++ ){ pow_a[i] = power(a[i],n); } [0]=3 [1]=7 [2]=4 [3]=5 [4]=9 [5]=1 sum = 0; for ( i = 0; i < pow_a.length; i++ ){ 添え字は0から始まる sum = sum + pow_a[i]; } System.out.println(“sum=“+sum); } a.length } public static int power( int x, int n ){略} a が参照している配列の 長さ 2008年8月,データ解析の基礎,加藤,瀬々,金子. 4
  5. 5. どのように計算されているのか べき乗の合計を求める public class Test07b { public static void main( String[] args ){ int[] a; int[] pow_a; int i, n, sum; n = 3; a = new int[6]; 長さ6の配列を生成 a[0]=3; a[1]=7; a[2]=4; a[3]=5; a[4]=9; a[5]=1; pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 for ( i = 0; i < pow_a.length; i++ ){ } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } 合計の 計算 最初 sum に 0 を入れて 一つずつ加えていっている } public static int power( int x, int n ){略} } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 5
  6. 6. どのように計算されているのか Test07b.java べき乗の合計を求める public class Test07b { public static void main( String[] args ){ int[] a; int[] pow_a; int i, n, sum; n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 for ( i = 0; i < pow_a.length; i++ ){ } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } 合計の 計算 最初 sum に 0 を入れて 一つずつ加えていっている } public static int power( int x, int n ){略} } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 6
  7. 7. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i n n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} } 正確には,様々なメモリ領域があり,また,スタックをヒープ領域に割り当 2008年8月,データ解析の基礎,加藤,瀬々,金子. 7 ててもよいことになっているが,ここでは簡単化のため,スタック以外のメ モリ領域をすべてヒープと呼ぶことにする
  8. 8. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 8
  9. 9. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } 配列の実体はヒープ上に確保され, public static int power( int x, int n ){略} [0]=0 [1]=0 [2]=0 } 変数a自体は実体のある 場所(アドレス)だけ保持している. 2008年8月,データ解析の基礎,加藤,瀬々,金子. 9
  10. 10. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=0 [2]=0 } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 10
  11. 11. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=0 } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 11
  12. 12. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 12
  13. 13. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=0 [1]=0 [2]=0 2008年8月,データ解析の基礎,加藤,瀬々,金子. 13
  14. 14. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=0 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=0 [1]=0 [2]=0 2008年8月,データ解析の基礎,加藤,瀬々,金子. 14
  15. 15. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=0 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=0 [2]=0 2008年8月,データ解析の基礎,加藤,瀬々,金子. 15
  16. 16. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=1 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=0 [2]=0 2008年8月,データ解析の基礎,加藤,瀬々,金子. 16
  17. 17. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=1 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=0 [2]=0 2008年8月,データ解析の基礎,加藤,瀬々,金子. 17
  18. 18. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=1 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=343 [2]=0 2008年8月,データ解析の基礎,加藤,瀬々,金子. 18
  19. 19. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=2 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=343 [2]=0 2008年8月,データ解析の基礎,加藤,瀬々,金子. 19
  20. 20. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=2 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=343 [2]=0 2008年8月,データ解析の基礎,加藤,瀬々,金子. 20
  21. 21. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=2 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=343 [2]=64 2008年8月,データ解析の基礎,加藤,瀬々,金子. 21
  22. 22. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=3 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=343 [2]=64 2008年8月,データ解析の基礎,加藤,瀬々,金子. 22
  23. 23. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=3 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=343 [2]=64 2008年8月,データ解析の基礎,加藤,瀬々,金子. 23
  24. 24. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=3 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=343 [2]=64 2008年8月,データ解析の基礎,加藤,瀬々,金子. 24
  25. 25. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=3 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum=0 pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=343 [2]=64 2008年8月,データ解析の基礎,加藤,瀬々,金子. 25
  26. 26. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=0 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum=0 pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=343 [2]=64 2008年8月,データ解析の基礎,加藤,瀬々,金子. 26
  27. 27. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=0 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum=27 pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=343 [2]=64 2008年8月,データ解析の基礎,加藤,瀬々,金子. 27
  28. 28. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=1 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum=27 pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=343 [2]=64 2008年8月,データ解析の基礎,加藤,瀬々,金子. 28
  29. 29. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=1 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum=27 pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=343 [2]=64 2008年8月,データ解析の基礎,加藤,瀬々,金子. 29
  30. 30. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=1 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum=370 pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=343 [2]=64 2008年8月,データ解析の基礎,加藤,瀬々,金子. 30
  31. 31. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=2 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum=370 pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=343 [2]=64 2008年8月,データ解析の基礎,加藤,瀬々,金子. 31
  32. 32. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=2 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum=370 pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=9 [1]=343 [2]=64 2008年8月,データ解析の基礎,加藤,瀬々,金子. 32
  33. 33. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=2 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum=434 pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=343 [2]=64 2008年8月,データ解析の基礎,加藤,瀬々,金子. 33
  34. 34. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=3 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum=434 pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=27 [1]=343 [2]=64 2008年8月,データ解析の基礎,加藤,瀬々,金子. 34
  35. 35. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=3 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum=434 pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=9 [1]=343 [2]=64 2008年8月,データ解析の基礎,加藤,瀬々,金子. 35
  36. 36. どのように計算されているのか Test07b.java べき乗の合計を求める スタック メモリの一部 public class Test07b { main のスタックフレーム public static void main( String[] args ){ int[] a; a pow_a int[] pow_a; int i, n, sum; i=3 n=3 n = 3; a = new int[3]; 長さ3の配列を生成 a[0]=3; a[1]=7; a[2]=4; sum=434 pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; } べき乗の 計算 } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } for ( i = 0; i < pow_a.length; i++ ){ 合計の 計算 ヒープ メモリの一部 } public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4 } [0]=9 [1]=343 [2]=64 2008年8月,データ解析の基礎,加藤,瀬々,金子. 36
  37. 37. 練習7-b. Test07b.java プロジェクト名: test07 public class Test07b { public static void main( String[] args ){ デバッガを使って int[] a; (1) pow_a および sum が int[] pow_a; int i, n, sum; 計算されていく様子を n = 3; a = new int[3]; 長さ3の配列を生成 確認せよ a[0]=3; a[1]=7; a[2]=4; (2) 変数 n の値を 2 などに 変更しても正しく計算 pow_a = new int[a.length]; for ( i = 0; i < a.length; i++ ){ } pow_a[i] = power(a[i],n); sum = 0; べき乗の 計算} されることを確認せよ for ( i = 0; i < pow_a.length; i++ ){ } sum = sum + pow_a[i]; System.out.println(“sum=“+sum); } 合計の 計算 } public static int power( int x, int n ){略} } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 37
  38. 38. 配列のまとめ int型配列 int[] double型配列 double[] 配列の領域確保 double[] x; x = new double[3]; x 配列は参照型 a.length ヒープ a が参照している配列の 長さ [0]=10.0 [1]=10.1 [2]=10.2 添え字は0から始まる 2008年8月,データ解析の基礎,加藤,瀬々,金子. 38
  39. 39. 目標 • 配列を理解する – 配列は多数のデータを表すのに便利 – データ群から統計量を求めよう – 配列に一気に数値を代入する方法 – メソッドに配列を渡すには • 2次元配列を理解する 2008年8月,データ解析の基礎,加藤,瀬々,金子. 39
  40. 40. 数値データ群の統計量を計算してみよう 遺伝子ネットワークの場合 • 統計量の例 – 合計 – 平均 – 最大値,最小値 ネットワークの性質を調べたい 数値データ 遺伝子 1 2 3 4 5 6 7 次数 2 2 1 4 3 2 2 2008年8月,データ解析の基礎,加藤,瀬々,金子. 40
  41. 41. 数値データ群の統計量を計算してみよう 遺伝子ネットワークの場合 • 統計量の例 – 合計 – 平均 – 最大値,最小値 ネットワークの性質を調べたい 数値データ 遺伝子 1 2 3 4 5 6 7 次数 2 2 1 4 3 2 2 辺の数 = 次数の合計/2 2008年8月,データ解析の基礎,加藤,瀬々,金子. 41
  42. 42. 数値データ群の統計量を計算してみよう 遺伝子ネットワークの場合 • 統計量の例 – 合計 – 平均 – 最大値,最小値 ネットワークの性質を調べたい 数値データ 遺伝子 1 2 3 4 5 6 7 次数 2 2 1 4 3 2 2 次数の平均から,ネットワークがどれくらい密か分かる 2008年8月,データ解析の基礎,加藤,瀬々,金子. 42
  43. 43. 数値データ群の統計量を計算してみよう 遺伝子ネットワークの場合 • 統計量の例 – 合計 – 平均 – 最大値,最小値 ネットワークの性質を調べたい 数値データ 遺伝子 1 2 3 4 5 6 7 次数 2 2 1 4 3 2 2 最大次数を持つ遺伝子はハブと呼ばれる重要な遺伝子である 2008年8月,データ解析の基礎,加藤,瀬々,金子. 43
  44. 44. 配列データの最大値を探すには 配列データ中,最大の数値を見つけるプログラム Test07c.java public class Test07c { 計算方法: public static void main( String[] args ){ int[] a; データを一つずつみて int i; 新記録なら記録を更新する int max_a; a = new int[3]; a[0]=3; a[1]=7; a[2]=4; 計算機で表現できる最小の整数を max_a = Integer.MIN_VALUE; 変数 max_a に代入 for ( i = 0; i < a.length; i++ ){ if ( max_a < a[i] ){ } } max_a = a[i]; }変数a[i]の値がmax_aより大きいなら max_a に a[i] を代入する System.out.println(“max_a=“+max_a); } } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 44
  45. 45. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 2008年8月,データ解析の基礎,加藤,瀬々,金子. 45
  46. 46. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0] [1] [2] 2008年8月,データ解析の基礎,加藤,瀬々,金子. 46
  47. 47. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0]=3 [1]=7 [2]=4 2008年8月,データ解析の基礎,加藤,瀬々,金子. 47
  48. 48. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a=最小整数 a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0]=3 [1]=7 [2]=4 2008年8月,データ解析の基礎,加藤,瀬々,金子. 48
  49. 49. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i=0 int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a=最小整数 a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0]=3 [1]=7 [2]=4 2008年8月,データ解析の基礎,加藤,瀬々,金子. 49
  50. 50. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i=0 int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a=最小整数 a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0]=3 [1]=7 [2]=4 2008年8月,データ解析の基礎,加藤,瀬々,金子. 50
  51. 51. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i=0 int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a=最小整数 a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0]=3 [1]=7 [2]=4 2008年8月,データ解析の基礎,加藤,瀬々,金子. 51
  52. 52. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i=0 int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a=3 a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0]=3 [1]=7 [2]=4 2008年8月,データ解析の基礎,加藤,瀬々,金子. 52
  53. 53. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i=1 int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a=3 a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0]=3 [1]=7 [2]=4 2008年8月,データ解析の基礎,加藤,瀬々,金子. 53
  54. 54. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i=1 int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a=3 a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0]=3 [1]=7 [2]=4 2008年8月,データ解析の基礎,加藤,瀬々,金子. 54
  55. 55. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i=1 int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a=3 a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0]=3 [1]=7 [2]=4 2008年8月,データ解析の基礎,加藤,瀬々,金子. 55
  56. 56. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i=1 int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a=7 a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0]=3 [1]=7 [2]=4 2008年8月,データ解析の基礎,加藤,瀬々,金子. 56
  57. 57. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i=2 int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a=7 a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0]=3 [1]=7 [2]=4 2008年8月,データ解析の基礎,加藤,瀬々,金子. 57
  58. 58. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i=2 int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a=7 a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0]=3 [1]=7 [2]=4 2008年8月,データ解析の基礎,加藤,瀬々,金子. 58
  59. 59. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i=2 int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a=7 a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0]=3 [1]=7 [2]=4 2008年8月,データ解析の基礎,加藤,瀬々,金子. 59
  60. 60. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i=3 int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a=7 a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0]=3 [1]=7 [2]=4 2008年8月,データ解析の基礎,加藤,瀬々,金子. 60
  61. 61. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i=3 int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a=7 a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0]=3 [1]=7 [2]=4 2008年8月,データ解析の基礎,加藤,瀬々,金子. 61
  62. 62. 最大値計算の過程 Test07c.java スタック メモリの一部 public class Test07c { main のスタックフレーム public static void main( String[] args ){ int[] a; a i=3 int int i; max_a; 長さ3の配列を生成 a = new int[3]; max_a=7 a[0]=3; a[1]=7; a[2]=4; max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ } if ( max_a < a[i] ){ } max_a = a[i]; } 最大値の 計算 System.out.println(“max_a=“+max_a); } } ヒープ メモリの一部 [0]=3 [1]=7 [2]=4 2008年8月,データ解析の基礎,加藤,瀬々,金子. 62
  63. 63. 練習7-c. Test07c.java プロジェクト名: test07 public class Test07c { public static void main( String[] args ){ デバッガを使って int[] a; (1) max_a が正しく int i; int max_a; 更新されていく過程 a = new int[3]; a[0]=3; a[1]=7; a[2]=4; を観測せよ (2) 配列データの数値を max_a = java.lang.Integer.MIN_VALUE; for ( i = 0; i < a.length; i++ ){ 適当に変更しても if ( max_a < a[i] ){ max_a = a[i]; 正しく最大値が } 計算されることを } System.out.println(“max_a=“+max_a); 確認せよ } } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 63
  64. 64. 練習7-d. Test07d.java プロジェクト名: test07 public class Test07c { public static void main( String[] args ){ 最小値を求める int[] a; プログラムを完成させよ int int i; min_a; 最小値をこの変数に入れる a = new int[3]; a[0]=3; a[1]=7; a[2]=4; min_a = java.lang.Integer.MAX_VALUE; for ( i = 0; i < a.length; i++ ){ if ( min_a > a[i] ){ この部分を埋めよ min_a = a[i]; int型の最大値 } java.lang.Integer.MAX_VALUE; } System.out.println(“min_a=“+min_a); } } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 64
  65. 65. 練習7-e. Test07e.java プロジェクト名: test07 このプログラムは最小値 を求め,何番目のデータ public class Test07c { public static void main( String[] args ){ が最小値をとるか計算す int[] a; int i, i_min; るプログラムである int min_a; a = new int[3]; この場合, a[0]=7; a[1]=3; a[2]=4; 以下のような出力となる i_min = -1; 画面 min_a = java.lang.Integer.MAX_VALUE; min_a=3 for ( i = 0; i < a.length; i++ ){ i_min=1 if ( min_a > a[i] ){ min_a = a[i]; } i_min = i; (1) 数値を適当に変更して } みて,それでも正しく System.out.println(“min_a=“+min_a); System.out.println(“i_min=“+i_min); 計算されることを確認 } } せよ (2) なぜ最小データの番号 が計算できるか考えよ 2008年8月,データ解析の基礎,加藤,瀬々,金子. 65
  66. 66. 練習7-e0. Test07e0.java プロジェクト名: test07 このプログラムは最大値 を求め,何番目のデータ public class Test07c { public static void main( String[] args ){ が最大値をとるか計算す int[] a; int i, i_max; るプログラムを完成させよ int max_a; a = new int[3]; a[0]=7; a[1]=3; a[2]=4; // Compute the maximal number and its index System.out.println(“max_a=“+max_a); System.out.println(“i_max=“+i_max); } } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 66
  67. 67. 目標 • 配列を理解する – 配列は多数のデータを表すのに便利 – データ群から統計量を求めよう – 配列に一気に数値を代入する方法 – メソッドに配列を渡すには • 2次元配列を理解する 2008年8月,データ解析の基礎,加藤,瀬々,金子. 67
  68. 68. 最小値計算プログラム再考 Test07d.java プロジェクト名: test07 public class Test07f { 下の2つのコードは等価 public static void main( String[] args ){ int[] a; int i; a = new int[3]; int min_a; a[0]=3; a[1]=7; a[2]=4; a = new int[3]; a[0]=3; a[1]=7; a[2]=4; 長さ3の配列を確保し min_a = java.lang.Integer.MAX_VALUE; それから値を代入 for ( i = 0; i < a.length; i++ ){ if ( min_a > a[i] ){ min_a = a[i]; a = new int[]{3,7,4}; } } 初期値{3,7,4} の配列を確保 System.out.println(“min_a=“+min_a); } } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 68
  69. 69. 「配列の初期化」を使うと2行が1行に Test07f.java プロジェクト名: test07 public class Test07f { public static void main( String[] args ){ int[] a; int i; int min_a; a = new int[]{3,7,4}; min_a = java.lang.Integer.MAX_VALUE; for ( i = 0; i < a.length; i++ ){ if ( min_a > a[i] ){ min_a = a[i]; } } System.out.println(“min_a=“+min_a); } } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 69
  70. 70. 目標 • 配列を理解する – 配列は多数のデータを表すのに便利 – データ群から統計量を求めよう – 配列に一気に数値を代入する方法 – メソッドに配列を渡すには • 2次元配列を理解する 2008年8月,データ解析の基礎,加藤,瀬々,金子. 70
  71. 71. 最小値計算部分をメソッドに プロジェクト名: test07 Test07g.java public class Test07g { public static void main( String[] args ){ int[] a; int min_a; これでmainメソッドは a = new int[]{3,7,4}; スッキリ min_a = min(a); System.out.println(“min_a=“+min_a); } public static int min( int[] a ){ int i, ret; 配列を引数にするメソッド ret = java.lang.Integer.MAX_VALUE; for ( i = 0; i < a.length; i++ ){ if ( ret > a[i] ){ ret = a[i]; } } return ret; } } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 71
  72. 72. どのように計算されているか プロジェクト名: test07 スタック メモリの一部 Test07g.java main のスタックフレーム public class Test07g { public static void main( String[] args ){ a int[] a; int min_a; a = new int[]{3,7,4}; min_a min_a = min(a); System.out.println(“min_a=“+min_a); } public static int min( int[] a ){ int i, ret; ret = java.lang.Integer.MAX_VALUE; for ( i = 0; i < a.length; i++ ){ if ( ret > a[i] ){ ret = a[i]; } } ヒープ メモリの一部 return ret; } } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 72
  73. 73. どのように計算されているか プロジェクト名: test07 スタック メモリの一部 Test07g.java main のスタックフレーム public class Test07g { public static void main( String[] args ){ a int[] a; int min_a; a = new int[]{3,7,4}; min_a min_a = min(a); System.out.println(“min_a=“+min_a); } public static int min( int[] a ){ int i, ret; ret = java.lang.Integer.MAX_VALUE; for ( i = 0; i < a.length; i++ ){ if ( ret > a[i] ){ ret = a[i]; } } ヒープ メモリの一部 return ret; } [0]=3 [1]=7 [2]=4 } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 73
  74. 74. min(a)を呼び出す すると新たなスタックフレームが作られる プロジェクト名: test07 スタック メモリの一部 Test07g.java main のスタックフレーム public class Test07g { public static void main( String[] args ){ a int[] a; int min_a; a = new int[]{3,7,4}; min_a min_a = min(a); System.out.println(“min_a=“+min_a); min のスタックフレーム } public static int min( int[] a ){ int i, ret; a i ret = java.lang.Integer.MAX_VALUE; for ( i = 0; i < a.length; i++ ){ ret if ( ret > a[i] ){ ret = a[i]; } 引数には,配列全体がコ } ピーされるのではなくて ヒープ メモリの一部 return ret; [0]=3 [1]=7 [2]=4 } } 参照のみがコピーされて いることに注意. 2008年8月,データ解析の基礎,加藤,瀬々,金子. 74
  75. 75. どのように計算されているか プロジェクト名: test07 スタック メモリの一部 Test07g.java main のスタックフレーム public class Test07g { public static void main( String[] args ){ a int[] a; int min_a; a = new int[]{3,7,4}; min_a min_a = min(a); System.out.println(“min_a=“+min_a); min のスタックフレーム } public static int min( int[] a ){ int i, ret; a i ret = java.lang.Integer.MAX_VALUE; for ( i = 0; i < a.length; i++ ){ ret=最大整数 if ( ret > a[i] ){ ret = a[i]; } } ヒープ メモリの一部 return ret; } [0]=3 [1]=7 [2]=4 } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 75
  76. 76. どのように計算されているか プロジェクト名: test07 スタック メモリの一部 Test07g.java main のスタックフレーム public class Test07g { public static void main( String[] args ){ a int[] a; int min_a; a = new int[]{3,7,4}; min_a min_a = min(a); System.out.println(“min_a=“+min_a); min のスタックフレーム } public static int min( int[] a ){ int i, ret; a i=0 ret = java.lang.Integer.MAX_VALUE; for ( i = 0; i < a.length; i++ ){ ret=最大整数 if ( ret > a[i] ){ ret = a[i]; } } ヒープ メモリの一部 return ret; } [0]=3 [1]=7 [2]=4 } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 76
  77. 77. どのように計算されているか プロジェクト名: test07 スタック メモリの一部 Test07g.java main のスタックフレーム public class Test07g { public static void main( String[] args ){ a int[] a; int min_a; a = new int[]{3,7,4}; min_a min_a = min(a); System.out.println(“min_a=“+min_a); min のスタックフレーム } public static int min( int[] a ){ int i, ret; a i=0 ret = java.lang.Integer.MAX_VALUE; for ( i = 0; i < a.length; i++ ){ ret=最大整数 if ( ret > a[i] ){ ret = a[i]; } } ヒープ メモリの一部 return ret; } [0]=3 [1]=7 [2]=4 } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 77
  78. 78. どのように計算されているか プロジェクト名: test07 スタック メモリの一部 Test07g.java main のスタックフレーム public class Test07g { public static void main( String[] args ){ a int[] a; int min_a; a = new int[]{3,7,4}; min_a min_a = min(a); System.out.println(“min_a=“+min_a); min のスタックフレーム } public static int min( int[] a ){ int i, ret; a i=0 ret = java.lang.Integer.MAX_VALUE; for ( i = 0; i < a.length; i++ ){ ret=3 if ( ret > a[i] ){ ret = a[i]; } } ヒープ メモリの一部 return ret; } [0]=3 [1]=7 [2]=4 } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 78
  79. 79. どのように計算されているか プロジェクト名: test07 スタック メモリの一部 Test07g.java main のスタックフレーム public class Test07g { public static void main( String[] args ){ a int[] a; int min_a; a = new int[]{3,7,4}; min_a min_a = min(a); System.out.println(“min_a=“+min_a); min のスタックフレーム } public static int min( int[] a ){ int i, ret; a i=1 ret = java.lang.Integer.MAX_VALUE; for ( i = 0; i < a.length; i++ ){ ret=3 if ( ret > a[i] ){ ret = a[i]; } } ヒープ メモリの一部 return ret; } [0]=3 [1]=7 [2]=4 } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 79
  80. 80. どのように計算されているか プロジェクト名: test07 スタック メモリの一部 Test07g.java main のスタックフレーム public class Test07g { public static void main( String[] args ){ a int[] a; int min_a; a = new int[]{3,7,4}; min_a min_a = min(a); System.out.println(“min_a=“+min_a); min のスタックフレーム } public static int min( int[] a ){ int i, ret; a i=1 ret = java.lang.Integer.MAX_VALUE; for ( i = 0; i < a.length; i++ ){ ret=3 if ( ret > a[i] ){ ret = a[i]; } } ヒープ メモリの一部 return ret; } [0]=3 [1]=7 [2]=4 } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 80
  81. 81. どのように計算されているか プロジェクト名: test07 スタック メモリの一部 Test07g.java main のスタックフレーム public class Test07g { public static void main( String[] args ){ a int[] a; int min_a; a = new int[]{3,7,4}; min_a min_a = min(a); System.out.println(“min_a=“+min_a); min のスタックフレーム } public static int min( int[] a ){ int i, ret; a i=1 ret = java.lang.Integer.MAX_VALUE; for ( i = 0; i < a.length; i++ ){ ret=3 if ( ret > a[i] ){ ret = a[i]; } } ヒープ メモリの一部 return ret; } [0]=3 [1]=7 [2]=4 } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 81
  82. 82. どのように計算されているか プロジェクト名: test07 スタック メモリの一部 Test07g.java main のスタックフレーム public class Test07g { public static void main( String[] args ){ a int[] a; int min_a; a = new int[]{3,7,4}; min_a min_a = min(a); System.out.println(“min_a=“+min_a); min のスタックフレーム } public static int min( int[] a ){ int i, ret; a i=1 ret = java.lang.Integer.MAX_VALUE; for ( i = 0; i < a.length; i++ ){ ret=3 if ( ret > a[i] ){ ret = a[i]; } } ヒープ メモリの一部 return ret; } [0]=3 [1]=7 [2]=4 } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 82
  83. 83. どのように計算されているか プロジェクト名: test07 スタック メモリの一部 Test07g.java main のスタックフレーム public class Test07g { public static void main( String[] args ){ a int[] a; int min_a; a = new int[]{3,7,4}; min_a min_a = min(a); System.out.println(“min_a=“+min_a); min のスタックフレーム } public static int min( int[] a ){ int i, ret; a i=2 ret = java.lang.Integer.MAX_VALUE; for ( i = 0; i < a.length; i++ ){ ret=3 if ( ret > a[i] ){ ret = a[i]; } } ヒープ メモリの一部 return ret; } [0]=3 [1]=7 [2]=4 } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 83
  84. 84. どのように計算されているか プロジェクト名: test07 スタック メモリの一部 Test07g.java main のスタックフレーム public class Test07g { public static void main( String[] args ){ a int[] a; int min_a; a = new int[]{3,7,4}; min_a min_a = min(a); System.out.println(“min_a=“+min_a); min のスタックフレーム } public static int min( int[] a ){ int i, ret; a i=2 ret = java.lang.Integer.MAX_VALUE; for ( i = 0; i < a.length; i++ ){ ret=3 if ( ret > a[i] ){ ret = a[i]; } } ヒープ メモリの一部 return ret; } [0]=3 [1]=7 [2]=4 } 2008年8月,データ解析の基礎,加藤,瀬々,金子. 84

×