# members

配列の各要素または他の配列の行または列を数える(及び位置を調べる)

## 呼び出し手順

                [nb [,loc]] = members(N, H)

                [nb [,loc]] = members(N, H, "last")

                [nb [,loc]] = members(N, H, "rows"|"cols")

                [nb [,loc]] = members(N, H, "rows"|"cols", "last")

                [nb [,loc]] = members(N, H, "rows"|"cols", "shuffle")

                [nb [,loc]] = members(N, H, "rows"|"cols", "shuffle", "last")

## 引数

N

  Needles: 論理値, 整数エンコードされた数値, 実数または複素数の10進数, 多項式またはテキストの行列またはハイパー行列.

  "rows"または"cols"モードでは,

  ハイパー行列は指定できません.

  指定した値(または行または列)は`N`の中に

  複数回配置することができます.

H

  Haystack:

  `N`と同じデータ型の行列またはハイパー行列.

  "rows" または "cols" モードの場合, ハイパー行列は指定できません.

  `N` および `H`

  はそれぞれ同じ列または行の数を有する必要があります.

オプション:

  以下の1から3個のオプションを順を問わず指定可能です:

  "last"

    `N`から

    needlesの`H`の位置を`loc`で

    検索した場合,

    デフォルトで`H`の中でそれぞれが最初に現れる位置が返されます.

  "rows", "cols"

    デフォルトで, `N`の各要素`N(i, j, ...)`

    は `H`の中で検索する際のneedleとみなされます.

    `"rows"` が検索された場合,

    `N`の各行はneedleとみなされ, 全体として,

    `H`の行で検索が行われます.

    `"cols"` が使用された場合,

    `"cols"`が

    `N` 及び `H`の列に適用されます.

    `"cols"` を使用した場合,

    `N` 及び `H` の列数と同じ部分に

    適用されます.

  "shuffle"

    `"rows"`または`"cols"` モードの場合,

    行/列の要素のデフォルトの順序が考慮されます: 例えば,`N`

    の `[ 7 3 5 ]` は,

    `H`の`[3 5 7]`にマッチしません.

    `"shuffle"` が指定された場合,

    例えば`[3 5 7]`の交換は

    `N`の`[3 5 7]`行に一致すると

    みなされます.

    このオプションは多項式の場合,無視されます.

nb

  通常モードの場合: `nb(i, j, ...)` は(実数として)

  `H`における`N(i, j, ...)`の出現回数

  を表します.

  `nb` および `N` は同じ形式です.

  `H` が空の場合, ゼロ行列が返されます.

  `N` が空の場合, 空の行列 `[]` が返されます.

  `"rows"` または `"cols"` モードの場合:

  `nb` は `N` が有する行/列と同じ数の要素を

  有する実数の行です.

  `nb(i)` は,`H(., :)` の中で

  `N(i, :)` が生じた数

  (または`H(:, .)`の中で`N(:, i)`)を返します.

loc

  通常のモードの場合:

  `loc` および`N` は同じ形式を有します.

  `loc(i, j, ...)` は,

  `N(i, j, ...)` がある場所として

  `H`に最小の線形化された添字を返します.

  `"last"`フラグが使用された場合,

  替りに最大の線形化された添字の最大値が返されます.

  `H`の中に `N(i, j, ...)`が見つかれない場合,

  `loc(i, j, ...)` は `0`に設定されます.

  `"rows"` または `"cols"` モードの場合:

  `loc` は`N`が有する行及び列と同じ

  数の要素を有する実数の行です.

  `loc(i)` は,

  `N(i, :)`に一致する最初の

  行`H(loc(i), :)`の添字

  (または `N(:, i)`に一致する最初の列

  `H(:, loc(i))` の添字)を返します.

  `"shuffle"`フラグが追加で指定された場合,

  行/列に基づく要素の順番は考慮されません.

## 説明

`nb = members(N, H [,"rows"|"cols"])`

は各要素または`H`の中にある

`N`の行または列の発生回数を返します.

要素が見つからない場合, 0 が返されます.

`N(i,j,...)`が現れる最初(デフォルト)または

`"last"`(最後)の`H`の

添字を,

2番目のオプションの出力`loc`により

取得できます.

`"rows"` または `"cols"`

の一致するものを探す場合,

オプション`"shuffle"`を使用することにより,

一致の際の要素の順番を無視することができます.

値 `%inf` および `-%inf`

を`N`の中および`H`の中で

使用することができます.

ノーマルモードでは,

`%nan`が`N`の中では

サポートされますが,`H`の中ではサポートされません.

`"rows"` または `"cols"` モードの場合,

`%nan` はどこでもサポートされます.

通常の要素毎のモードの場合, members(..) は,

論理値,

整数エンコードされた数値(8-16-32ビット長の符号ありまたは無し)

および実数を高速に処理するために

dsearch(..) を使用します.

複素数, テキスト, 多項式の場合,

より低速でよりメモリ消費が多いアルゴリズムが使用されます.

これらのデータ型についてより高い性能を得たい場合,

より大きな`N`または`H`の場合,

ユーザは

stacksize(..)を増加させることになります.

計算時間が長い場合, 進行状況の棒グラフが表示されます.

## 例

    N = [1 8 4 5 2 1];
    H = [9 7 4 2 1 4];

    [nb, loc] = members(N, H, "last")
    // nb  = [1 0 2 0 1 1] を返す: 例えば, Hの中に4が2回現れる.
    // そして loc = [5 0 6 0 4 5]: 4が最後に現れるのはHの6番目の位置

    [nb, loc] = members(N, H)
    // loc = [5 0 3 0 4 5]を返す: 4が最初に現れるのはHの3番目の位置

    // ハイパー行列の場合. 前記の N 及び Hを利用:
    N = matrix(N, [3 1 2]);
    H = matrix(H, [3 1 2]);
    [nb, loc] = members(N, H, "last")

    // 整数の場合:
    N = int8(grand(3, 2, "uin", -5, 5));
    H = int8(grand(4, 4, "uin", -5, 5));
    [nb, loc] = members(N, H)

    // 多項式の場合 (複素数の係数を指定可能):
    z = %z;
    N = [z (1-z)^2 ; -4 %i*z ];
    H = [2  %i*z -z  3-z  z  z^3 z];
    [nb, loc] = members(N, H)

    // テキストの場合:
    N = [ "Hi" "Hu" "Allo"];
    H = [ "Hello" "Bonjour" "Allo"
          "Holà"  "Allo"  "Hallo"
          "Hi"    "Hé"    "Salud" ];
    [nb, loc] = members(N, H, "last")

    // 行の場合:
     H = [
      3  3  0
      4  1  0
      2  0  3
      0  1  4
      3  4  3
      0  4  1
      3  1  0
      ];
     N = [
      1  2  3
      0  1  4
      3  0  3
      4  1  0
      2  0  2
      ];
     N, H
     [nb, loc] = members(N, H, "rows")
     [nb, loc] = members(N, H, "rows","last")
     [nb, loc] = members(N, H, "rows","shuffle") // [4 1 0], [0 1 4] 及び [0 4 1] は同一とみなされる

    // 列の場合: 定義済みの N 及び H を利用:
     N = N.', H = H.'
     [nb, loc] = members(N, H, "cols", "shuffle")

## 参照

- dsearch

- intersect

- find

- vectorfind

## 履歴

5.5.0
members() 関数が導入されました.