2017-11-01 8 views
1

Cを使用して、ゼロ以外の要素よりも多くの要素を持つ行列を生成しようとしています。ゼロ要素は、それを生成する方法がランダムでなければなりません。ランダムなゼロを持つ行列を生成する

私はゼロのようにいくつかの要素に乱数を生成することができていますが、ゼロ要素が非ゼロ要素

int main(){ 
    srand(time(NULL)); 
    int array[25]; 
    int i; 
    for (i=0;i<s;i++){ 
     if (rand()%3 == 0) 
       array[i]=rand()%3; 
     else 
       array[i] = rand(); 
    } 
} 

以上でなければなりませんが、生成行列スパース行列のですか?違いをどうすれば理解できますか?

+0

ランダムな分布が均一でありたいと思いますか? –

答えて

2

ゼロ以外の値を持つ行列の10%を望んでいないとしますか?大規模な(数千または数百万の要素)真の疎な行列を持つならば、おそらくそれほど少なくなります。

私は実際にあなたが行くルートを行っていないでしょう。私はまずすべての0に配列を初期化します。 int myArray[25] = {0}またはmemsetでこれを行うことができます。

これを取得したら、必要な非ゼロ要素の数を計算できます。 30個の要素があり、10%以外の要素が必要な場合は、3要素を入力する必要があります。あなたはGoogleを利用してsrandを使って非ゼロ要素を配置するインデックスを計算する方法を知ることができます。

あなたがそれらを持っていたら、埋めるために実際の値を取得および設定するために、再度srandを使用することができます。

私は意図的に、ここで私が取るのと同じ一般的な方向性を詳細の多くを与えられていません。おそらくいくつかのことを試してみて、実際にコンパイルするコード例を提供すると良いでしょう(あなたの例では定義されていないいくつかの変数があります)。

関連する問題