atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
kohei-hasegawa @ ウィキ
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
kohei-hasegawa @ ウィキ
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
kohei-hasegawa @ ウィキ
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • kohei-hasegawa @ ウィキ
  • トップページ
  • Python講習
  • スライスを学ぼう

kohei-hasegawa @ ウィキ

スライスを学ぼう

最終更新:2020年05月14日 20:01

kohei-hasegawa

- view
メンバー限定 登録/ログイン

4-5.スライスを学ぼう

Numpyをより便利にしてくれるのがスライスという概念です.スライスの名前の通り,配列から一部を切り出す機能なのですが,非常に多様な活用方法があります.スライスを使わずしてnumpyを使いこなしているとは言えません.スライスをマスターすればPythonをより便利に活用出来ます.

(1) スライスの基本構造
とあるN行M列の配列をAとします.このときのスライス構造は以下のように表します.

A [始点:終点,始点:終点]

最初の始点:終点はX軸に関する範囲指定を示しています.例えば,始点を0,終点を5とすれば0番目から5番目までの要素が抜き出されます.これは始点を除いた:終点という表現と同じ意味を持ちます.次元の区切りは,で行います.また,重要な表現として始点と終点を指定しない:だけの表現はその軸に関してはなにもしないということを意味します.例えば,A[5,: ]は5行目の数値全てを取り出すということを意味しています.以下はこれらの実例です.

>>> A = np.array([[1,2,3,4,5],[6,7,8,9,10]])  #2行5列
>>> A
array([[ 1,  2,  3,  4,  5],
          [ 6,  7,  8,  9, 10]])
>>> A[0:1]  #2軸目以降を省略して書くことも可能
[[1, 2, 3, 4, 5]] #[[ となっているので二次元

>>> A[0:1].shape
>>> (1,5) #一次元配列ではなく,1行5列という二次元で認識される点に注意

>>> A[0] #1次元目の0行目を指定している
[1, 2, 3, 4, 5]  #こちらは一次元で出力される

>>> A[0,0:3]  #0行目の0列目から左から数えて3番目(要素番号:2)まで切り出し,
[1, 2, 3]

>>> A[:,0:3] #行方向のスライスをせず,そのまま.
[[1, 2, 3],
 [6, 7, 8]]

>>> A[:,2:3]  #列(横)方向に関して左から2つ目から左から3番目をスライス
[[3],
 [8]]

>>> A[:,:] #スライスなし=そのまま
array([[ 1,  2,  3,  4,  5],
          [ 6,  7,  8,  9, 10]])

>>> A[1,:] #1行目全体をスライスする
[[ 6,  7,  8,  9, 10]]

(2) Top / Worst Nを抜き出そう
このスライスが多用されるシーンの一つがnp.sort系とスライスを組み合わせたTop / Worst Nの抜き出しです.np.sortは前節で解説したように配列の要素を小さい順に並び替えるものでした.


np.sort(X, axis = None…)
Xの要素を小さい順に並び替えます.

np.argsort(X, axis = None…)
Xの要素のを小さい順に並び替えた場合の要素番号を取得します.


上記の説明に従えば,Top3を抜き出すにはsortされた配列から後ろ(右)から3個をスライスすれば良いことになります.

>>> A = [1,15,13,6,9]
>>> np.sort(A)
[1,6,9,13,15]
>>> np.sort(A)[-3:]#右から数えて3つ目が始点
[9,13,15]

>>> np.argsort(A)
[0,3,4,2,1]
>>> np.argsort(A)[-3:0]
[4,2,1]

(3) 行だけを飛び地で抜き出す
スライスは1行目,3行目,8行目のように連続しない行や列を各個抜き出し,新たな一まとまりの配列として出力することが出来ます.

>>> A = np.random.randint(0,10,(5,5))
A = [[5, 8, 0, 9, 7],      #人によって違います
       [5, 2, 5, 9, 7],
       [6, 4, 7, 6, 7],
       [5, 6, 9, 8, 8],
       [2, 4, 7, 4, 6]]

>>> lst = [0,2,4]
>>> A[lst,:]      #列方向はそのままに指定した行全体を抜き出す
[[5, 8, 0, 9, 7],
 [6, 4, 7, 6, 7],
 [2, 4, 7, 4, 6]]

より具体的な例で言えば,列方向の合計が30を超える行だけを抜き出すといった使い方です.

>>> B = np.sum(A,axis=1) #列方向の合計値を出力
>>> B
[29, 28, 30, 36, 23]

>>> lst = np.where(B >= 30) #30以上の要素番号を抜き出す
>>> lst 
(array([2, 3], dtype=int32),)

>>> A[lst[0],:]  #列方向の合計が30を超える行だけを抜き出す
[[6, 4, 7, 6, 7],
 [5, 6, 9, 8, 8]]

(4) 既存の配列に挿入する
スライスは配列の切り出しだけではありません.既存の配列の一部に別の配列の一部を挿入することも出来ます.また,指定した範囲を特定の数値に置き換える事もできます.

>>> lst = range(5)
>>> A[0,:] = lst #0行目にlstを挿入する
>>> A
[[0., 1., 2., 3., 4.],
 [0., 0., 0., 0., 0.],
 [0., 0., 0., 0., 0.],
 [0., 0., 0., 0., 0.],
 [0., 0., 0., 0., 0.]]
       #0行目がrange(5)に置き換わっている

>>> A[:,2] = lst #2列目にlstを挿入する
>>> A
[[0., 1., 0., 3., 4.],
 [0., 0., 1., 0., 0.],
 [0., 0., 2., 0., 0.],
 [0., 0., 3., 0., 0.],
 [0., 0., 4., 0., 0.]]

>>> A[3:5,:] = 1 #3行目から5行目までを1に
>>> A
[[0., 1., 0., 3., 4.],
 [0., 0., 1., 0., 0.],
 [0., 0., 2., 0., 0.],
 [1., 1., 1., 1., 1.],
 [1., 1., 1., 1., 1.]]

>>> A = np.zeros((5,5))
>>> B = np.full((5,5),(5))
>>> C = np.random.randint(0,5,(5,5))
>>> [[4, 3, 1, 1, 0], #人によって違います
       [3, 4, 4, 0, 3],
       [3, 3, 4, 3, 4],
       [2, 4, 1, 2, 4],
       [4, 3, 2, 2, 1]]
>>> A[0:3,:] = B[0:3,:] * C[0:3,:]
>>> A
[[20., 15.,  5.,  5.,  0.],
 [15., 20., 20.,  0., 15.],
 [15., 15., 20., 15., 20.],
 [ 0.,  0.,  0.,  0.,  0.],
 [ 0.,  0.,  0.,  0.,  0.]]  #0行目から3行目までをB×Cの計算結果に置き換える

ここまでで察しの良い人はスライスにfor文が使われていないことに気づいたかも知れません.これも冒頭で述べた「for文を使ったら負け」にきっちりと対応しています.C言語などであれば,スライス後のサイズである配列を予め生成し,そこにfor文で次々に数値を当てはめていく形になりますが,スライスを使えば,より感覚的に,より見やすく,高速に演算が可能になります.皆さん,どんどんスライスしていきましょう.


次へ
「スライスを学ぼう」をウィキ内検索
LINE
シェア
Tweet
kohei-hasegawa @ ウィキ
記事メニュー
メニューを編集

メニュー

トップページ
  • 体裁全般
    • 図表
    • 引用
    • 数式
    • 文章表現
    • ソースコード
  • Officeテンプレ
  • Office Tips
  • 仕事Tips
  • 研究Tips
    • 文献レビュー
    • プレゼンの作り方
    • タスクスケジューラのすゝめ
  • 学位論文
    • 卒業論文
    • 修士論文
    • 博士論文
    • よく使う図表
  • 雑務Tips
    • プレゼン発表練習会
    • M1中間ポスター発表
    • 年度末大掃除
    • D論公聴会
    • 新歓BBQ
    • ソウル東京
    • 製本機の使い方
    • コピー機の使い方
    • 研究室紹介
  • 英語関係
    • 校正全般
    • 自己紹介(Biography)
    • 校正業者の活用方法
    • 英語プレゼン
    • 使えそうな例文
  • 論文執筆
    • タイトル
    • アブストラクト
    • 結果と考察
  • 勉強会
  • Python講習
  • 長谷川の遊び場
    • ダンピング対策状況マップ
    • Twitter拾い物
    • お引越しメモ
    • 本棚
    • 長谷川冒険記

Wiki編集方法

リンク

  • 長谷川のHP
  • 長谷川の予定



記事メニュー2

更新履歴

取得中です。

閲覧数ランキング(昨日)

  • カウンターの値があるページは1つもありません。

閲覧数ランキング(累計)

  • トップページ (4267)
  • トップページ/Python講習 (807)
  • トップページ/雑務Tips/D論公聴会 (578)
  • トップページ/学位論文/博士論文 (481)
  • トップページ/Python講習/オブジェクト指向で体裁を整える (397)
  • トップページ/体裁全般/文章表現 (370)
  • トップページ/長谷川の遊び場/本棚 (345)
  • トップページ/勉強会 (288)
  • トップページ/Office Tips (248)
  • トップページ/Python講習/他にも色々あります (236)


ここを編集
人気記事ランキング
  1. トップページ/Python講習/オブジェクト指向で体裁を整える
もっと見る
最近更新されたページ
  • 21日前

    メニュー
  • 164日前

    トップページ/長谷川の遊び場/本棚
  • 422日前

    トップページ/長谷川の遊び場/長谷川冒険記
  • 481日前

    トップページ/長谷川の遊び場/Twitter拾い物
  • 963日前

    トップページ/体裁全般/文章表現
  • 1029日前

    トップページ/Office Tips
  • 1173日前

    トップページ/Python講習
  • 1309日前

    トップページ/仕事Tips/国家公務員のためのマネジメントテキスト
  • 1344日前

    トップページ/仕事Tips
  • 1369日前

    トップページ/長谷川の遊び場
もっと見る
人気記事ランキング
  1. トップページ/Python講習/オブジェクト指向で体裁を整える
もっと見る
最近更新されたページ
  • 21日前

    メニュー
  • 164日前

    トップページ/長谷川の遊び場/本棚
  • 422日前

    トップページ/長谷川の遊び場/長谷川冒険記
  • 481日前

    トップページ/長谷川の遊び場/Twitter拾い物
  • 963日前

    トップページ/体裁全般/文章表現
  • 1029日前

    トップページ/Office Tips
  • 1173日前

    トップページ/Python講習
  • 1309日前

    トップページ/仕事Tips/国家公務員のためのマネジメントテキスト
  • 1344日前

    トップページ/仕事Tips
  • 1369日前

    トップページ/長谷川の遊び場
もっと見る
ウィキ募集バナー
急上昇Wikiランキング

急上昇中のWikiランキングです。今注目を集めている話題をチェックしてみよう!

  1. Dance Dance Revolution SP総合wiki
  2. 世界樹の迷宮X wiki
  3. 本好きの下剋上 有志まとめwiki@5ch
  4. トリコ総合データベース
  5. ダイナマイト野球3D
  6. EDF5:地球防衛軍5@Wiki
  7. 検索してはいけない言葉 @ ウィキ
  8. アサルトリリィ wiki
  9. 固めまとめWiki
  10. Fate/Grand Order @wiki 【FGO】
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 発車メロディーwiki
  6. 検索してはいけない言葉 @ ウィキ
  7. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  8. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  9. オレカバトル アプリ版 @ ウィキ
  10. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
もっと見る
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. まどドラ攻略wiki
  2. MadTown GTA (Beta) まとめウィキ
  3. シュガードール情報まとめウィキ
  4. SurrounDead 攻略 (非公式wiki)
  5. R.E.P.O. 日本語解説Wiki
  6. Dark War Survival攻略
  7. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  8. Wplace Wiki
  9. カツドンチャンネル @ Wiki
  10. AviUtl2のWiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  3. 稼ぎ - 地球防衛軍6 @ ウィキ
  4. ミッション攻略 - 地球防衛軍6 @ ウィキ
  5. 我孫子 清十郎 - ストグラ まとめ @ウィキ
  6. サーヴァント/一覧/クラス別 - Fate/Grand Order @wiki 【FGO】
  7. 雨宮(amemiya0123) - ダイナマイト野球3D
  8. 鬼レンチャン(レベル順) - 鬼レンチャンWiki
  9. 機体一覧 - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  10. ウイングガンダムゼロ【EW】 - 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.