4

次の配列があります。

int[,] myArray1 = new int[2, 3] { { 1, 2, 3 }, { 4, 6, 8 } };
int[,] myArray2 = new int[2, 3] { { 6, 4, 3 }, { 8, 2, 8 } };

私が知りたいのは、次の方法です。

  1. myArray1 と myArray2 の合計で新しい配列を作成します
  2. myArray1 と myArray2 を減算して新しい配列を作成します
  3. myArray1 と myArray2 の乗算で新しい配列を作成します

合計の結果は次のようになります。

int[,] myArray3 = new int[2, 3] { { 7, 6, 0 }, { -4, 4, 0 } };

減算の結果は次のようになります。

int[,] myArray3 = new int[2, 3] { { 5, 2, 6 }, { 12, 8, 16 } };

乗算の結果は次のようになります。

int[,] myArray3 = new int[2, 3] { { 6, 8, 9 }, { 32, 12, 64 } };

これは、for ループを使用して、配列を出力するのと同じように実行できますか? 例を探してみましたが、特定の問題に使用できるものは見つかりませんでした。

4

5 に答える 5

4
int[,] a3 = new int[2,3];

for(int i = 0; i < myArray1.GetLength(0); i++)
{
for(int j = 0; j < myArray1.GetLength(1); j++)
{
a3[i,j] = myArray1[i,j] + myArray2[i,j];
a3[i,j] = myArray1[i,j] - myArray2[i,j];
a3[i,j] = myArray1[i,j] * myArray2[i,j];
}
}

明らかに新しい計算を行う前にa3を保存する必要があります

于 2012-12-18T08:17:05.760 に答える
3

合計の場合:

for (int i = 0; i < 2; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                myArray3[i, j] = myArray1[i, j] + myArray2[i, j];
            }                
        }

減算の場合:

for (int i = 0; i < 2; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                myArray3[i, j] = myArray2[i, j] - myArray1[i, j];
            }                
        }

乗算の場合:

for (int i = 0; i < 2; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                myArray3[i, j] = A[i, j] * B[i, j];
            }
        }
于 2012-12-18T08:15:15.593 に答える
1

配列操作をより高速に行いたい場合は、 System.Threading.TasksのC# Parallel.Forループを使用します。

単純な算術演算の場合、外側のループを並列化することは、最新の PC プロセッサを使用しない場合よりもはるかに高速です。より複雑な操作の場合、または配列サイズが小さい場合、並列バージョンはさまざまな理由で遅くなる可能性があります。

したがって、ストップウォッチを使用して行列演算の時間を計り、最速のソリューションを使用してください。並列化により、正しく実装されていれば、C# での配列/画像処理がはるかに高速になります。

算術演算の後にデータ型をオーバーフローさせたり、複数のスレッド間で変数を共有したりすることに注意してください (これについては、 System.Threading.Interlockedを参照してください)...

以下引き算。加算と乗算についても同様です。

Parallel.For(0, array.GetLength(1), y=>
{
    for (int x = 0; x < array.GetLength(0); x++)
        {
            difference[x,y] = minuend[x,y] - subtrahend[x,y];
        }
    }
});
于 2021-02-26T23:56:17.550 に答える
1

はい、これはforループで配列を出力するのとまったく同じように行われます

c# にはさらに使いやすい foreach ループがあります

注: これは宿題だと思いますので、100% 決定的な結末をすべて答えるつもりはありません。

 int[,] myArray1 = new int[2, 3] { { 1, 2, 3 }, { 4, 6, 8 } };
 int[,] myArray2 = new int[2, 3] { { 6, 4, 3 }, { 8, 2, 8 } };
    
          foreach (int[] a1 in myArray1) 
          {
             foreach(int i in a1)
             {
                //operation here
                //you get the idea
             }        
          }
于 2012-12-18T07:41:30.017 に答える
0

for ループを使用する場合は、次のように多次元配列の行/列を反復処理できます。

for (int i = 0; i < myArray1.GetLength(0); i++)
{
    for (int j = 0; j < myArray1.GetLength(1); j++)
    {
        // Here, you can access the array data by index, using i and j. 
        // Ex, myArray1[i, j] will give you the value of 1 in the first iteration.
    }
}

注: 配列の GetLength メソッドに値を渡すと、配列の次元を表します。http://msdn.microsoft.com/en-us/library/system.array.getlength.aspxを参照してください

于 2012-12-18T07:56:03.350 に答える