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

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

新規登録して質問してみよう
ただいま回答率
86.12%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

解決済

数値をcsv出力する方法

neko0782
neko0782

総合スコア1

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

2回答

0リアクション

0クリップ

266閲覧

投稿2022/10/05 08:38

編集2022/10/05 09:03

前提

Python(Google Colaboratory)でポアソン方程式の計算を行いその結果をグラフや図として出力することはできましたが座標の数値をcsvファイルとして出力することができません

実現したいこと

計算結果を数値として出力する
x,y,φ(このコードではp)を一列ごと、計3列で出力したい

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

TypeError: writerows() takes exactly one argument (3 given)

該当のソースコード

Python

from logging import fatal from matplotlib import pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import Axes3D import numpy as np import itertools import csv # 条件設定 nx = 100 ny = 100 nt = 1 xmin = 0 xmax = 2 ymin = 0 ymax = 2 dx = (xmax - xmin) / (nx - 1) dy = (ymax - ymin) / (ny - 1) # 初期状態 p = np.zeros((ny, nx)) pd = np.zeros((ny, nx)) b = np.zeros((ny, nx)) c = np.zeros((ny, nx)) f = np.zeros((ny, nx)) g = np.zeros((ny, nx)) h = np.zeros((ny, nx)) k = np.zeros((ny, nx)) l = np.zeros((ny, nx)) o = np.zeros((ny, nx)) x = np.linspace(xmin, xmax, nx) y = np.linspace(xmin, xmax, ny) # 電荷 b[ 50 , 1 : 101 : 4 ] = -10.e-8 c[ 50 , 2 : 101 : 8 ] = -10.e-8 f[ 50 , 3 : 101 : 8 ] = -10.e-8 g[ 50 , 4 : 101 : 8 ] = -10.e-8 h[ 47:50 , 1 : 101 : 4 ] = -10.e-8 k[ 47 , 0 : 101 : 8 ] = -10.e-8 l[ 47 , 6 : 101 : 8 ] = -10.e-8 o[ 47 , 7 : 101 : 8 ] = -10.e-8 for it in range(nt): pd = p.copy() p[1:-1,1:-1] = (((pd[1:-1, 2:] + pd[1:-1, :-2]) * dy**2 + (pd[2:, 1:-1] + pd[:-2, 1:-1]) * dx**2 - (b[1:-1, 1:-1] + c[1:-1 , 1:-1] + f[1:-1 , 1:-1] + g[1:-1 , 1:-1] + h[1:-1 , 1:-1] + k[1:-1 , 1:-1] + l[1:-1 , 1:-1] + o[1:-1 , 1:-1]) * dx**2 * dy**2) / (2 * (dx**2 + dy**2))) p[0, :] = 0 p[ny-1, :] = 0 p[:, 0] = 0 p[:, nx-1] = 0 def plot2D(x, y, p): fig = plt.figure(figsize=(11, 7), dpi=100) ax = fig.gca(projection='3d') X, Y = np.meshgrid (x , y) surf = ax.plot_surface(X, Y, p[:], rstride=1, cstride=1, cmap=cm.viridis,linewidth=0, antialiased=False) ax.view_init(30, 225) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('φ') plot2D(x, y, p) plt.show() csv_path = "/content/drive/MyDrive/" # CSVファイル名 csv_name = 'out_name.csv' # リストをCSVファイルに出力 with open(csv_path+csv_name, 'w', newline='') as f: writer = csv.writer(f) writer.writerows(x, y, p) # リスト形式の配列のままcsvファイルに出力 #オブジェクトを生成 fig = plt.figure(figsize=(11,7), dpi=100) fig xmin = 0 xmax = 2 ymin = 0 ymax = 2 x = np.linspace(xmin, xmax, nx) y = np.linspace(xmin, xmax, ny) X, Y = np.meshgrid(x, y) plt.contourf(X, Y, p, alpha=0.5, cmap=cm.viridis) plt.colorbar() plt.xlabel('X') plt.ylabel('Y')

試したこと

2.3日調べながら模索しましたが課題の締め切りが近いので質問させていただくことにしましたよろしくお願いします

補足情報(FW/ツールのバージョンなど)

そのままエクセルに出力する方法があれば最高です
プログラミング初心者なのでご容赦願います

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

jbpb0

2022/10/05 08:54

> TypeError: writerows() takes exactly one argument (3 given) 質問のコードには「writerows」がありません 上記のエラーが出た、実際に実行したコードを質問に記載してください (ここに書くのではなく、質問を編集して記載する)
neko0782

2022/10/05 09:07

修正しました。シンプルにコードのコピペミスでした。教えていただきありがとうございます。
jbpb0

2022/10/05 13:42 編集

> csv_path = "/content/drive/MyDrive/" のすぐ上に print(p.shape) を追加して実行したら分かりますが、「p」は二次元配列なので、単に「x」と「y」に並べても、 > x,y,φ(このコードではp)を一列ごと、計3列で出力したい にはなりません 「p」は一列(一次元)ではないので コードの最後に近いところで > X, Y = np.meshgrid(x, y) で計算してる「X」と「Y」は「p」と同じ二次元配列で、同じ位置のものが対応してるので、それと同じ計算をして「X」と「Y」を作り、「X」と「Y」と「p」をそれぞれ一次元化して並べて保存したらいいのではないですかね
jbpb0

2022/10/07 06:35

> with open(csv_path+csv_name, 'w', newline='') as f: のすぐ上に下記を追加 X, Y = np.meshgrid(x, y) X1 = X.ravel().reshape((-1, 1)) Y1 = Y.ravel().reshape((-1, 1)) p1 = p.ravel().reshape((-1, 1)) 下記を修正 writer.writerows(x, y, p) ↓ 修正 writer.writerows(np.hstack([X1, Y1, p1])) で、どうでしょうか?

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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