Pick
詳細
- sel はどんな深さのネストしたリストでもよい.
- Pick[list,sel,patt]は,sel[[i1,i2,…]]が patt とマッチする list[[i1,i2,…]]を選び出す.
- Pickは,ネストしたリスト sel の中の patt にマッチする要素の並び方によっては,不調和配列を返すことがある.
- list や sel 中の頭部はListでなくともよい.
- PickはSparseArrayオブジェクトと使うことができる.
- sel が"BitVector"型のDataStructureオブジェクトの場合,Pick[list,sel]は sel の値1に対応する list の要素を取り出す. »
- Parallelize[Pick[list,sel]]はPick[list,sel]をすべてのサブカーネルで並列に計算する. »
例題
すべて開く すべて閉じる例 (2)
スコープ (5)
「選択」リストでTrueが現れる位置に当たる要素を抽出する:
Pick[{a, b, c, d}, {True, False, False, True}]Pick[{a, b, c, d}, {1, 2, 3, 4}, 2 | 4]SparseArrayを使って引数を選ぶ:
sel = SparseArray[{1 -> True, 100 -> True, _ -> False}, 100]Pick[Range[100], sel]SparseArrayから要素を選び出す:
data = SparseArray[{{1, 3} -> 2, {2, 2} -> 3, {3, 3} -> 5}]Pick[data, IdentityMatrix[3], 1]"BitVector"型で長さが5のデータ構造を作成する:
ds = CreateDataStructure["BitVector", 5];2番目と4番目のビットを1に設定する.インデックスは1ではなく0であることに注意のこと:
ds["BitSet", 1];
ds["BitSet", 3]Pick[{a, b, c, d, e}, ds]一般化と拡張 (3)
アプリケーション (1)
selector = RandomChoice[{True, False}, 10 ^ 7];
data = Range[10 ^ 7];
AbsoluteTiming[pick = Pick[data, selector];]対応するDataStructureを使った同じ演算の方がはるかに速い:
ds = CreateDataStructure["BitVector", selector];
AbsoluteTiming[pick2 = Pick[data, ds];]pick === pick2特性と関係 (3)
Pick[list,sel,patt]における比較は純粋に構造的なもので,頭部は考慮しない:
sel = {1, Cos[1], Sin[1]};
list = {a, b, f[b]};
Pick[list, sel, 1]f[b]が選択されるのは,sel の3,1部分が patt にマッチするためである:
sel[[3, 1]]list に対応する部分が存在するなら,その部分が頭部とともに選択される:
list[[3, 1]]sel の2,1部分も patt にマッチすることに注意のこと:
sel[[2, 1]]list[[2, 1]]Pickを並列に計算する:
Parallelize[Pick[{a, b, c, d}, {1, 0, 1, 1}, 1]]sel がビットベクトルなら,Pick[list,sel]は sel の値1に対応する list の要素を取り出す:
Pick[{a, b, c, d, e}, DataStructure["BitVector", {"Data" -> ByteArray["Cg=="], "Capacity" -> 5, "BitCount" -> 2}]]DataStructure["BitVector", {"Data" -> ByteArray["Cg=="], "Capacity" -> 5, "BitCount" -> 2}]["Boole"]//Normal考えられる問題 (4)
「選択」リストはデータと同じ長さ・同じ構造でなければならない:
Pick[{a, b, c, d}, {True, False}]Pickで原子式を使うことができる:
Pick[x, {1, 2, 3}, _List]これは,空を含むすべての部分がマッチのためにテストされるためである:
MatchQ[{1, 2, 3}[[]], _List]x[[]]原子引数が含まれる場合はそのままでは選択されず,Sequence[]が返される:
Pick[x, {1, 2, 3}, _ ? NumericQ]Pick[{1, 2, 3}, False]第3引数でExcept[c]を使うと思いがけない結果になることがある:
Pick[{a, b, c, d, e}, {1, 0, 1, 0, 0}, Except[1]]MatchQ[{1, 0, 1, 0, 0}, Except[1]]Except[c,p]を使って,パターンを選択引数の要素に制限する:
Pick[{a, b, c, d, e}, {1, 0, 1, 0, 0}, Except[1, _Integer]]list = {1, x + y + z};
selector = {1, x + 2};
Pick[list, selector, _Integer]リストがTrueとFalseだけを含むように事前にテストを適用して構造的な問題を避ける:
newSelector = Map[MatchQ[#, _Integer]&, selector]Pick[list, newSelector]テクニカルノート
-
▪
- リストの構築
履歴
2004 で導入 (5.1) | 2025 で更新 (14.3)
テキスト
Wolfram Research (2004), Pick, Wolfram言語関数, https://reference.wolfram.com/language/ref/Pick.html (2025年に更新).
CMS
Wolfram Language. 2004. "Pick." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2025. https://reference.wolfram.com/language/ref/Pick.html.
APA
Wolfram Language. (2004). Pick. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Pick.html
BibTeX
@misc{reference.wolfram_2026_pick, author="Wolfram Research", title="{Pick}", year="2025", howpublished="\url{https://reference.wolfram.com/language/ref/Pick.html}", note=[Accessed: 04-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_pick, organization={Wolfram Research}, title={Pick}, year={2025}, url={https://reference.wolfram.com/language/ref/Pick.html}, note=[Accessed: 04-November-2026]}