"FixedArray" (データ構造)
"FixedArray"
要素が一般式である固定長配列を表す.
詳細
- 固定長配列は,要素の効率的な抽出と更新に役立つ.
-
CreateDataStructure[ "FixedArray",n] n 個の要素を持つ新しい空の"FixedArray"を作成する CreateDataStructure[ "FixedArray",x,n] 長さ n の新しい"FixedArray" を x に初期化して作成する CreateDataStructure[ "FixedArray",elems] elems を含む新しい"FixedArray"を作成する Typed[x,"FixedArray"] x に"FixedArray"型を与える - "FixedArray"型のデータ構造には,以下の演算が使える.
-
ds["Copy"] ds のコピーを返す time: O(n) ds["Elements"] ds の要素のリストを返す time: O(n) ds["EmptyQ"] ds が要素を持たない場合はTrue time: O(1) ds["Fold",fun] fun を ds の要素に適用し,結果を累積する time: O(n) ds["Fold",fun,init] fun を ds の要素に適用する.init で始めて,結果を累積する time: O(n) ds["Length"] ds に保存される要素の数 time: O(1) ds["Part",i] ds の i 番目の部分を返す time: O(1) ds["SetPart",i,elem] ds の i 番目の部分を更新する time: O(1) ds["SwapPart",i,j] ds の i
番目と j
番目の部分を交換するtime: O(1) ds["Visualization"] ds の可視化を返す time: O(n) - 以下の関数もサポートする.
-
dsi===dsj dsi が dsj に等しい場合はTrue ds["Part",i]=val ds の i 番目の要素を val に設定する FullForm[ds] ds の完全形 Information[ds] ds についての情報 InputForm[ds] ds の入力形 Length[ds] ds 内の要素の数 Normal[ds] ds を通常の式に変換する
例題
すべて開く すべて閉じる例 (3)
新しい"FixedArray"は,CreateDataStructureを使って作成できる:
ds = CreateDataStructure["FixedArray", 8]ds["Length"]式バージョンの ds を返す.要素はNullに初期化される:
ds["Elements"]ds["Part", 1] = f[2]ds["Part", 1]Normal[ds]ds = CreateDataStructure["FixedArray", 1000];
Do[ds["SetPart", i, i], {i, 1000}]ds["Visualization"]ds["Fold", Plus]ds = CreateDataStructure["FixedArray", f[1], 10];Normal[ds]スコープ (13)
作成 (3)
12個の要素を含む"FixedArray"を作成する:
ds = CreateDataStructure["FixedArray", 12]デフォルトですべての要素はNullに初期化される:
ds["Elements"]デフォルトの初期値を持つ12個の要素で"FixedArray"を作成する:
ds = CreateDataStructure["FixedArray", -1, 12]ds["Elements"]配列のコンテンツで初期化された"FixedArray"を作成する:
ds = CreateDataStructure["FixedArray", {x, y, z}]ds["Elements"]情報 (1)
新しい"FixedArray"は,CreateDataStructureを使って作成することができる:
ds = CreateDataStructure["FixedArray", 8]Information[ds]演算 (9)
"Copy" (1)
初期値を含む"FixedArray"を作成する:
ds = CreateDataStructure["FixedArray", {1, 2, 3}]ds1 = ds["Copy"]{Normal[ds], Normal[ds1]}ds1["SetPart", 2, 42];
{Normal[ds], Normal[ds1]}"Elements" (1)
初期値を含む"FixedArray"を作成する:
ds = CreateDataStructure["FixedArray", Range[10]];
ds["Visualization"]ds["Elements"]Normalは同じリストを返す:
Normal[ds]"EmptyQ" (1)
"FixedArray"が空であるかどうかをテストする:
ds = CreateDataStructure["FixedArray", 0];
ds["EmptyQ"]"Fold" (1)
初期値を含む"FixedArray"を作成する:
ds = CreateDataStructure["FixedArray", Range[10]]Plusを使って配列の全要素を組み合わせ混合し,総数を出す:
ds["Fold", Plus]ds["Fold", Plus, 42]"Length" (1)
初期値を含む"FixedArray"を作成する:
ds = CreateDataStructure["FixedArray", Range[5]]ds["Length"]Lengthは同じ値を返す:
Length[ds]"Part" (1)
初期値を含む"FixedArray"を作成する:
ds = CreateDataStructure["FixedArray", Range[10]]ds["Part", 5]"SetPart" (1)
初期値を含む"FixedArray"を作成する:
ds = CreateDataStructure["FixedArray", Range[10]]ds["SetPart", 5, x]ds["Visualization"]ds["Part", 6] = y;
ds["Visualization"]"SwapPart" (1)
初期値を含む"FixedArray"を作成する:
ds = CreateDataStructure["FixedArray", Range[10]]ds["SwapPart", 5, 6]ds["Visualization"]"Visualization" (1)
初期値を含む"FixedArray"を作成する:
ds = CreateDataStructure["FixedArray", Range[10]]ds["Visualization"]特性と関係 (5)
InputForm (1)
InputFormは,"FixedArray"の連続番号付きのコンテンツを返す:
InputForm[CreateDataStructure["FixedArray", Range[10]]]この連続番号付きの形式を使って,データ構造を再作成することが可能である:
DataStructure["FixedArray", {"Data" -> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}]Length (1)
Lengthを使って"FixedArray"内の要素数を得ることができる:
ds = CreateDataStructure["FixedArray", Range[10]];
Length[ds]ds["Length"]Normal (1)
Normalを使って"FixedArray"の要素を得ることができる:
ds = CreateDataStructure["FixedArray", Range[10]];
Normal[ds]ds["Elements"]SameQ (1)
SameQを使って,2つの配列に同じ要素が同じ順序で含まれているかどうかをテストすることができる:
ds1 = CreateDataStructure["FixedArray", Range[10]];
ds2 = CreateDataStructure["FixedArray", Range[10]];
ds1 === ds21つの要素が変更されると,2つの配列はもはや同じではなくなる:
ds1["SetPart", 5, 42];
ds1 === ds2"DynamicArray" (1)
"DynamicArray"に使えるアルゴリズムの多くは,"FixedArray"にも使える.
考えられる問題 (2)
インタラクティブな例題 (1)
個々のプロットを計算してデータ構造に保存し,Manipulateを使ってインタラクティブにそれらを表示する:
ds = CreateDataStructure["FixedArray", 16]Do[ds["SetPart", i, Plot[Sin[i x] / x, {x, 0, 10}, Filling -> Axis, PlotRange -> 1]], {i, ds["Length"]}]Manipulate[ds["Part", i], {i, 1, ds["Length"], 1}]おもしろい例題 (2)
フィボナッチ数列 (1)
ds = CreateDataStructure["FixedArray", 16]ds["SetPart", 1, 1];
ds["SetPart", 2, 1];
Do[ds["SetPart", i, ds["Part", i - 2] + ds["Part", i - 1]], {i, 3, ds["Length"]}]ds["Visualization"]ヒストグラム (1)
redBin = CreateDataStructure["FixedArray", ConstantArray[0, 256]];
greenBin = CreateDataStructure["FixedArray", ConstantArray[0, 256]];
blueBin = CreateDataStructure["FixedArray", ConstantArray[0, 256]];
indexOf[x_] := Floor[255 x] + 1
computeHistogram[{r_, g_, b_}] :=
Module[{},
redBin["SetPart", indexOf[r], redBin["Part", indexOf[r]] + 1];
greenBin["SetPart", indexOf[b], greenBin["Part", indexOf[b]] + 1];
blueBin["SetPart", indexOf[g], blueBin["Part", indexOf[g]] + 1];
]ImageScan[computeHistogram, [image]]BarChart[Transpose[Normal /@ {redBin, greenBin, blueBin}], PlotRange -> All, ChartStyle -> {Red, Green, Blue}, BarSpacing -> None]履歴
2020 で導入 (12.1)