人工知性を作りたい

私が日々、挑戦したことや学んだことなどを紹介していく雑記ブログです。 (新しいAI技術HTM, 専門の音声信号処理, 趣味のアニメ等も書いてます。)

C言語でヒストグラム作成!【完全初心者向け】

f:id:hiro-htm877:20190601191549p:plain

 

f:id:hiro-htm877:20190601202549p:plain

 

プログラミング初心者、学生

ヒストグラムって何?なんかC言語ヒストグラム書けって言われたんだけど・・・」

 

そんな方の疑問に答えます。

 

コードが知りたい方は目次のソースコードへ飛んでください!

本記事のテーマ

【完全初心者向け】C言語ヒストグラムの作成

ヒストグラムとは

 ヒストグラム(英語: histogram[1])とは、縦軸に度数、横軸に階級をとった統計グラフの一種で、データの分布状況を視覚的に認識するために主に統計学や数学、画像処理等で用いられる。柱図表[1]、度数分布図、柱状グラフともいう。(Wikipedia引用)

 

実装

今回は

int array[15] = {1, 4, 2, 2, 1, 5, 4, 1, 2, 7, 6, 6, 1, 2, 2};

この配列をヒストグラムに変換します。

ヒストグラム(histogram)変換!

変換方法は、 

1. 配列histogramを宣言する

2. histogramの要素を階級とし、同じ階級の数字を数える

histogram変換コード
array_size = sizeof(array) / sizeof(int);
    int histogram[100] = {0};    //適当に大きめに配列を宣言
    for(int i =0; i<array_size; i++){
        histogram[array[i]]++;
    }
histogram表示コード
 max_index = max_array(array, array_size);    //階級の最大値を計算
    for(int i=0; i<max_index; i++){
        printf("%d: ", i);
        for(int j=0;j<histogram[i]; j++){
            printf("*");
        }
        printf("\n");
出力 

0:

1: ****

2: *****

3:

4: **

5: *

6: **

 

完成です!

統計処理などでも使うので、便利にご活用ください!

 

ソースコード

#include <stdio.h>
void enshu0603(void);
int max_array(int array[], int array_size);

int main() {
    enshu0603();
    return 0;
}

void enshu0603(){
    int array[15] = {1, 4, 2, 2, 1, 5, 4, 1, 2, 7, 6, 6, 1, 2, 2};
    int max_index, array_size;
    array_size = sizeof(array) / sizeof(int);
    max_index = max_array(array, array_size);
    int histogram[100] = {0};
    for(int i =0; i<array_size; i++){
        histogram[array[i]]++;
    }
    for(int i=0; i<max_index; i++){
        printf("%d: ", i);
        for(int j=0;j<histogram[i]; j++){
            printf("*");
        }
        printf("\n");
    }
}
int max_array(int array[], int array_size){
    int tmp = array[0];
    for (int i=0; i<array_size; i++) {
        if(array[i] > tmp){
            tmp = array[i];
        }
    }
    return tmp;
}