2

数値の列ベクトルがいくつか (つまり > 100) あるとします。ベクターは同じ長さで大きくなります (例: 20k アイテム)。ベクトルは隣接していないため、行列を作成しません。

私が望むのは、たとえば、ベクトルを使用して行単位の計算を行うことです。

各行について、すべてのベクトルの中でゼロ以外の最初の値は?

また

各行について、すべてのベクトルの最大値はいくつですか?

この単純化された例を参照してください。これは、すべてのベクトルの最大値を取得する必要があります。これは、すべての行で 3 になります (実際に表示される値は 1 です)。

ここに画像の説明を入力

ベクトルを行列としてコピーし、列範囲ではなく、特定の行のすべてのベクトルにまたがる行範囲の列を取得できれば簡単です。ただし、データのサイズが大きいため、これはオプションではありません。私はそれが他のSOの質問に関連していると思います:配列をINDIRECT()の引数として持つことは可能ですか、それでINDIRECT()は配列を返しますか?.

4

2 に答える 2

2

CHOOSE を使用して、同じサイズの列を 1 つの範囲に結合できます。たとえば、3 つの範囲の例では次のようになります。

=CHOOSE({1,2,3},$B$1:$B$4,$B$5:$B$8,$A$3:$A$6)

次に、それを数式で直接使用します。たとえば、コピーされた G2 で、例の各行の MAX を取得します。

=MAX(INDEX(CHOOSE({1,2,3},$B$1:$B$4,$B$5:$B$8,$A$3:$A$6),F2,0))

または、CHOOSE 部分を名前付き範囲として定義することもできます [100 個の範囲がある場合に特に便利です]。たとえば、その Matrix に名前を付けて使用します

=MAX(INDEX(Matrix,F2,0))

使用できる範囲が100個ある場合にショートカットするには、範囲の数に基づいて{1,2,3}部分を変更する必要があります

=CHOOSE(TRANSPOSE(ROW(INDIRECT("1:100"))),Range1, Range2.....Range100)

CTRL+ SHIFT+で確認する必要がありますENTER

最初のゼロ以外の値を取得するには、このバージョンを使用できます

=INDEX(INDEX(Matrix,F2,0),MATCH(TRUE,INDEX(Matrix,F2,0)<>0,0))

CTRL+ SHIFT+でも確認されましたENTER

于 2013-11-05T16:45:44.940 に答える