質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

615閲覧

numpy.rollに関する質問

KTT11

総合スコア0

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/30 06:22

前提・実現したいこと

pythonで格子ボルツマン法の気体シミュレーションを作っています。
境界条件について検討する段階で、以下の問題に直面しました。

発生している問題・エラーメッセージ

関数stream()内のnp.rollの第三引数にあたえるのはaxis=(0か1)しかないのではないと認識していたため、 以下のソースコードのがなぜ成り立つのかわかりません。 説明をお願いしたいと思います。 ちなみに私は axis=0ならば第二引数の要素分だけ行がシフトし、 axis=1ならば第二引数の要素分だけ各行で要素がシフトすると認識しておりました。 以下のソースコードはこちらのサイトを参照しています。 https://salad-bowl-of-knowledge.github.io/hp/physics/2018/01/30/lattice_boltzmann.html

該当のソースコード

import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation from ipywidgets import interact w = np.array([4/9 , 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 36, 1 / 36, 1 / 36, 1 / 36]) e = np.array([[0, 0], [0, 1], [0, -1], [1, 0], [-1, 0], [1, 1], [-1, -1],[1, -1], [-1, 1]]) def stream(): #障害物との衝突処理 global n for i, axis in zip(range(1, 5),[[1, 1, 0, 1], [1, -1, 0, -1], [0, 1, 1, -1], [0, -1, 1, 1]]): #(1)式 n[:, :, i] = np.roll(n[:, :, i], axis[1], axis=axis[0]) n[:, :, i + 4] = np.roll(np.roll(n[:, :, i + 4], axis[1],axis=axis[0]),axis[3],axis=axis[2]) for i in range(1, 9): n[:, :, i][barrier[:, :, i]] = n[:, :, i - (-1)**i][barrier[:, :, 0]] #衝突した分を逆向きの成分に流してます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

  • axis=0ならば第二引数の要素分だけ行がシフトし、

axis=1ならば第二引数の要素分だけ各行で要素がシフトすると認識しておりました。

違います。
axis=は、rollする軸です。3次元とかで考えてみたほうが理解しやすいと思います。

python

1>>> a = np.arange(60).reshape(3,4,5) 2>>> np.roll(a, 1, axis=0) 3array([[[40, 41, 42, 43, 44], 4 [45, 46, 47, 48, 49], 5 [50, 51, 52, 53, 54], 6 [55, 56, 57, 58, 59]], 7 8 [[ 0, 1, 2, 3, 4], 9 [ 5, 6, 7, 8, 9], 10 [10, 11, 12, 13, 14], 11 [15, 16, 17, 18, 19]], 12 13 [[20, 21, 22, 23, 24], 14 [25, 26, 27, 28, 29], 15 [30, 31, 32, 33, 34], 16 [35, 36, 37, 38, 39]]]) 17>>> np.roll(a, 1, axis=1) 18array([[[15, 16, 17, 18, 19], 19 [ 0, 1, 2, 3, 4], 20 [ 5, 6, 7, 8, 9], 21 [10, 11, 12, 13, 14]], 22 23 [[35, 36, 37, 38, 39], 24 [20, 21, 22, 23, 24], 25 [25, 26, 27, 28, 29], 26 [30, 31, 32, 33, 34]], 27 28 [[55, 56, 57, 58, 59], 29 [40, 41, 42, 43, 44], 30 [45, 46, 47, 48, 49], 31 [50, 51, 52, 53, 54]]]) 32>>> np.roll(a, 1, axis=2) 33array([[[ 4, 0, 1, 2, 3], 34 [ 9, 5, 6, 7, 8], 35 [14, 10, 11, 12, 13], 36 [19, 15, 16, 17, 18]], 37 38 [[24, 20, 21, 22, 23], 39 [29, 25, 26, 27, 28], 40 [34, 30, 31, 32, 33], 41 [39, 35, 36, 37, 38]], 42 43 [[44, 40, 41, 42, 43], 44 [49, 45, 46, 47, 48], 45 [54, 50, 51, 52, 53], 46 [59, 55, 56, 57, 58]]])

投稿2021/12/30 06:39

編集2021/12/30 06:54
ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KTT11

2021/12/30 07:40

ご回答ありがとうございます。 axis=で軸を指定しているというのは、どの部分を軸として指定しているのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問