Extract
詳細
- Extract[expr,{i,j,…}]は,整数 i, j, …についてはPart[expr,i,j,…]に等しい. »
- Extractの位置指定は,Positionの戻す値や,MapAt等の関数で使われる形式に従う. »
- 個々の位置指定 pos は,より一般的な{part1,part2,…}という形式でも行える.ただし partiは,整数 i,All,Span[…]のようなPart指定である. »
- 1レベルの複数部分を抽出する指定はそのレベルの頭部を保持する. »
- 抽出した成分を評価しないのなら,Extract[expr,…,Hold]の書式を使う. »
- expr がSparseArrayオブジェクトまたは構造化配列のとき,Extract[expr,…]は通常の配列の対応する部分を抽出する. »
- Extractは,Partにおけるのと同じキー指定を使ってAssociationオブジェクトに使うことができる. »
- Extract[pos][expr]はExtract[expr,pos]に等しい.
例題
すべて開く すべて閉じる例 (5)
Extract[{1, 2, 3, 4}, {2}]Extract[{2}][{a, b, c, d}]Extract[f[g[1, 2], h[3]], {1, 2}]Extract[f[g[1, 2], h[x ^ 2]], {{1, 2}, {2, 1, 1}}]Extract[(| | | |
| - | - | - |
| a | b | c |
| d | e | f |
| g | h | i |), {All, 2}]Positionが与える部分を抽出する:
e = f[g[1, 2], {h[3]}];p = Position[e, _Integer]Extract[e, p]スコープ (25)
単一の位置と複数の位置 (5)
Extract[{a, b, c, d, e}, {3}]Extract[{a, b, c, d, e}, {{1}, {4}, {3}}]mat = Array[a, {3, 3}];Extract[mat, {1, 3}]Extract[mat, {{1}, {3}}]Extract[mat, {{1, 3}}]Extract[mat, {{1, 2}, {3, 3}, {2, 1}}]規則の右辺を抽出し,評価されないように結果をHoldでラップする:
Extract[x :> 1 + 1, {2}, Hold]リストからいくつかの部分を抽出し,各部分をHoldでラップする:
Extract[{a, b, c, d, e}, {{1}, {2}, {5}}, Hold]Allを含む形式 (5)
m = (| | | |
| - | - | - |
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |);Extract[m, {2}]Extract[m, {2, All}]Extract[m, {All, 2}]Extract[m, {All, {1, 3}}]%//MatrixFormExtract[m, {{All, 1}, {All, 3}}]%//MatrixFormrules = {{a -> 1, b -> 2}, {c -> 3, d -> 4, e -> 5}, {f -> 6}};Extract[rules, {All, 1}]Extract[rules, {2, All, 2}]Extract[rules, {All, All, 1}]Allを使った抽出ではそのレベルの頭部が保持される:
Extract[e[f[1, 2, 3], g[4, 5, 6], h[7, 8, 9]], {All, 1}]Holdを使って評価を防ぎ,規則のリストからすべての右辺を抽出する:
Extract[{a :> (1/0), b :> ArcTan[0, 0], c :> Print[5]}, {All, 2}, Hold]Holdがないと,式が評価されて副作用が起きる:
Extract[{a :> (1/0), b :> ArcTan[0, 0], c :> Print[5]}, {All, 2}]規則のリストから2辺を別々に抽出し,2つの結果をHoldCompleteでラップする:
Extract[{a :> (1/0), b :> ArcTan[0, 0], c :> Print[5]}, {{All, 1}, {All, 2}}, HoldComplete]連想 (6)
Extract[<|expr -> 1, "str" -> 2|>, {Key[expr]}]キーが文字列ならKeyラッパーは使っても使わなくてもよい:
Extract[<|expr -> 1, "str" -> 2|>, {"str"}]Extract[<|2 -> 1 + x ^ 2, 3 -> y ^ 2 - 1, 1 -> x + y + z|>, {Key[1]}]Extract[<|2 -> 1 + x ^ 2, 3 -> y ^ 2 - 1, 1 -> x + y + z|>, {1}]Extract[<|2 -> 1 + x ^ 2, 3 -> y ^ 2 - 1, 1 -> x + y + z|>, {{1}, {Key[1]}}]Extract[<|2 -> 1 + x ^ 2, 3 -> -1 + y ^ 2, 1 -> x + y + z|>, {Key[3], 1}]Extract[<|2 -> 1 + x ^ 2, 3 -> -1 + y ^ 2, 1 -> x + y + z|>, {{Key[3], 1}, {3, 1}}]Extract[<|"a" :> 1 / 0, "b" :> Log[0]|>, {{"a"}, {"b"}}, Hold]Holdがないと,連想中の値が評価されてメッセージが出される:
Extract[<|"a" :> 1 / 0, "b" :> Log[0]|>, {{"a"}, {"b"}}]特殊配列の型 (3)
Extract[expr,…]は,expr が疎な配列なら対応する通常配列から一部を抽出する:
sparse = SparseArray[{{1, 3} -> 1, {2, 2} -> 2, {3, 1} -> 3}, {3, 3}]Extract[sparse, {2, 2}]部分配列はSparseArrayオブジェクトとして返される:
Extract[sparse, {All, 2}]sparse = SparseArray[{{1, 3} -> 1, {2, 2} -> 2, {3, 1} -> 3}, {3, 3}]Extract[sparse, {All, {1, 3}}]%//Normal独立した2つの列として抽出すると別々の配列のリストが返される:
Extract[sparse, {{All, 1}, {All, 3}}]通常配列に変換すると結果が最初に抽出したものの転置であることが分かる:
%//NormalQuantityArray[{{1, 2}, {3, 4}, {5, 6}}, {"Meters", "Seconds"}]Extract[%, {1, 1}]SymmetrizedArray[{{1, 1} -> 3, {2, 2} -> 1, {3, 1} -> -5}, {3, 3}, Symmetric[All]]Extract[%, {1}]スパンとサブリスト (6)
Extract[Range[10], {3 ;; 5}]Extract[{a, b, c, d, e, f}, {1 ;; -1 ;; 2}]Extract[f[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], {-1 ;; 1 ;; -3}]Extract[{{1, 2}, {3, 4, 5}}, {All, 1 ;; 2}]Extract[{{1, 2}, {3, 4, 5}}, {All, {1, -1}}]m = Array[a, {5, 5}];Extract[m, {2 ;; 4, 1}]Extract[m, {{1, 3, 4}, 2}]Extract[m, {-2 ;; -1, {1, 2, 5}}]Extract[m, {All, {1, 5}}]リスト中の最初の2つの規則の右辺を評価されないようにして抽出する:
Extract[{a :> 1 ^ 2, b :> 2 ^ 2, c :> 3 ^ 3}, {1 ;; 2, 2}, Hold]特性と関係 (6)
pos がリストではないなら,pos と{pos}は等しい指定である:
Extract[Range[10], 3] == Extract[Range[10], {3}]Extract[Range[10], 3 ;; 5] == Extract[Range[10], {3 ;; 5}]整数のリスト{i,j,…}については,Extract[expr,{i,j,…}]はPart[expr,i,j,…]に等しい:
Extract[{ArcTan[f[x], g[y]]}, {1, 2, 1}] === Part[{ArcTan[f[x], g[y]]}, 1, 2, 1]Extract[expr,{{i1,i2,…},{j1,j2,…},…}]は{Part[expr,i1,i2,…],Part[expr,j1,j2,…],…}に等しい:
m = RandomReal[1, {3, 3}];
Extract[m, {{1 ;; 2, 1}, {2 ;; 3, 2}}] === {Part[m, 1 ;; 2, 1], Part[m, 2 ;; 3, 2]}Extract[m, {}] === {}expr = {{a, b, c}, {c, {a}, d}, {{e}, a, f}};Position[expr, a]Extract[expr, %]Extract[expr,{pos1,pos2,…},h]の h は各 posiを抽出した結果をラップする:
expr = Partition[Range[9], 3]Extract[expr, {{1, 1}, {All, 3}}, h]単一の位置指定しか与えられていない場合は,h が最も外側の頭部になる:
Extract[expr, {All, 1}, h]1つのレベルから複数の部分を抽出する指定では,そのレベルの頭部が保持される:
expr = f[{1, 2}, {3, 4, 5}, {6}, {7, 8, 9, 10}];Extract[expr, {All, 1}]Extract[expr, {1 ;; 3, 1}]Extract[expr, {{2, 4}, 1}]考えられる問題 (2)
位置のリストが空なので,Extract[expr,{}]は部分式の空リストを返す:
Extract[h[a, b], {}]Extract[expr,{{}}]は,式全体にあたる位置{}の部分リストを抽出する:
Extract[h[a, b], {{}}]第2引数のリストのリストは,常に位置指定のリストとして解釈される:
arr = Array[a, {2, 4}];Extract[arr, {{1, 2}}]結果として,Partにおいては同等の指定がExtractでは異なる扱いをうけることがある:
Part[arr, {1, 2}] === Part[arr, 1 ;; 2]Extract[arr, {{1, 2}}] === Extract[arr, {1 ;; 2}]PartとExtractの一貫性が必要な場合は,リストのリストを使って末端の余分なリストを削除する:
First@Extract[arr, {{{1, 2}}}] === First@Extract[arr, {{1 ;; 2}}]関連項目
テクニカルノート
履歴
1996 で導入 (3.0) | 2003 で更新 (5.0) ▪ 2012 (9.0) ▪ 2014 (10.0) ▪ 2021 (13.0)
テキスト
Wolfram Research (1996), Extract, Wolfram言語関数, https://reference.wolfram.com/language/ref/Extract.html (2021年に更新).
CMS
Wolfram Language. 1996. "Extract." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2021. https://reference.wolfram.com/language/ref/Extract.html.
APA
Wolfram Language. (1996). Extract. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Extract.html
BibTeX
@misc{reference.wolfram_2026_extract, author="Wolfram Research", title="{Extract}", year="2021", howpublished="\url{https://reference.wolfram.com/language/ref/Extract.html}", note=[Accessed: 14-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_extract, organization={Wolfram Research}, title={Extract}, year={2021}, url={https://reference.wolfram.com/language/ref/Extract.html}, note=[Accessed: 14-August-2026]}