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

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

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

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

Python

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

Q&A

解決済

2回答

515閲覧

数値をcsv出力する方法

neko0782

総合スコア1

Google Colaboratory

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

Python

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

0グッド

0クリップ

投稿2022/10/05 08:38

編集2022/10/07 19:14

前提

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

実現したいこと

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

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

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

該当のソースコード

Python

1from logging import fatal 2from matplotlib import pyplot as plt 3from matplotlib import cm 4from mpl_toolkits.mplot3d import Axes3D 5import numpy as np 6import itertools 7import csv 8 9# 条件設定 10nx = 100 11ny = 100 12nt = 1 13xmin = 0 14xmax = 2 15ymin = 0 16ymax = 2 17 18dx = (xmax - xmin) / (nx - 1) 19dy = (ymax - ymin) / (ny - 1) 20 21# 初期状態 22p = np.zeros((ny, nx)) 23pd = np.zeros((ny, nx)) 24b = np.zeros((ny, nx)) 25c = np.zeros((ny, nx)) 26f = np.zeros((ny, nx)) 27g = np.zeros((ny, nx)) 28h = np.zeros((ny, nx)) 29k = np.zeros((ny, nx)) 30l = np.zeros((ny, nx)) 31o = np.zeros((ny, nx)) 32x = np.linspace(xmin, xmax, nx) 33y = np.linspace(xmin, xmax, ny) 34 35# 電荷 36b[ 50 , 1 : 101 : 4 ] = -10.e-8 37c[ 50 , 2 : 101 : 8 ] = -10.e-8 38f[ 50 , 3 : 101 : 8 ] = -10.e-8 39g[ 50 , 4 : 101 : 8 ] = -10.e-8 40h[ 47:50 , 1 : 101 : 4 ] = -10.e-8 41k[ 47 , 0 : 101 : 8 ] = -10.e-8 42l[ 47 , 6 : 101 : 8 ] = -10.e-8 43o[ 47 , 7 : 101 : 8 ] = -10.e-8 44for it in range(nt): 45 46 pd = p.copy() 47 48 p[1:-1,1:-1] = (((pd[1:-1, 2:] + pd[1:-1, :-2]) * dy**2 + 49 (pd[2:, 1:-1] + pd[:-2, 1:-1]) * dx**2 - 50 (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) / 51 (2 * (dx**2 + dy**2))) 52 53 p[0, :] = 0 54 p[ny-1, :] = 0 55 p[:, 0] = 0 56 p[:, nx-1] = 0 57 58 59def plot2D(x, y, p): 60 fig = plt.figure(figsize=(11, 7), dpi=100) 61 ax = fig.gca(projection='3d') 62 X, Y = np.meshgrid (x , y) 63 surf = ax.plot_surface(X, Y, p[:], rstride=1, cstride=1, cmap=cm.viridis,linewidth=0, antialiased=False) 64 ax.view_init(30, 225) 65 ax.set_xlabel('x') 66 ax.set_ylabel('y') 67 ax.set_zlabel('φ') 68 69plot2D(x, y, p) 70plt.show() 71 72csv_path = "/content/drive/MyDrive/" 73# CSVファイル名 74csv_name = 'out_name.csv' 75# リストをCSVファイルに出力 76with open(csv_path+csv_name, 'w', newline='') as f: 77 writer = csv.writer(f) 78 writer.writerows(x, y, p) 79# リスト形式の配列のままcsvファイルに出力 80 81#オブジェクトを生成 82fig = plt.figure(figsize=(11,7), dpi=100) 83fig 84 85xmin = 0 86xmax = 2 87ymin = 0 88ymax = 2 89 90x = np.linspace(xmin, xmax, nx) 91y = np.linspace(xmin, xmax, ny) 92 93X, Y = np.meshgrid(x, y) 94plt.contourf(X, Y, p, alpha=0.5, cmap=cm.viridis) 95plt.colorbar() 96plt.xlabel('X') 97plt.ylabel('Y') 98

試したこと

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

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

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

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

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

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

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

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

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])) で、どうでしょうか?
guest

回答2

0

with open(csv_path+csv_name, 'w', newline='') as f:

のすぐ上に下記を追加

python

1X, Y = np.meshgrid(x, y) 2X1 = X.ravel().reshape((-1, 1)) 3Y1 = Y.ravel().reshape((-1, 1)) 4p1 = p.ravel().reshape((-1, 1))

 

python

1 writer.writerows(x, y, p)

↓ 修正

python

1 writer.writerows(np.hstack([X1, Y1, p1]))

投稿2022/10/07 10:14

jbpb0

総合スコア7651

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

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

0

ベストアンサー

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

「writerows()はひとつ(one)の引数(argument)しかとりません (なのに3つ与えられとる)」

ということは、writerows([[1, 2, 3]]) のように書くべきところを writerows(1, 2, 3) とか書いているのでは?

py

1>>> import csv 2>>> csv.writer(open('t.csv', 'w')).writerows(1, 2, 3) 3Traceback (most recent call last): 4 File "<stdin>", line 1, in <module> 5TypeError: writerows() takes exactly one argument (3 given) 6>>> csv.writer(open('t.csv', 'w')).writerows([[1, 2, 3]]) 7>>> open('t.csv').read() 8'1,2,3\n'

投稿2022/10/05 08:44

編集2022/10/05 08:51
shiracamus

総合スコア5406

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

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

neko0782

2022/10/05 09:05

教えていただいた通りにコードを修正しましたが今度はpの値しか表示されず出力が一列で終わってしまいます
shiracamus

2022/10/05 11:44

どのように修正したのですか? csv出力する前に、printで出力内容を表示してみてはいいかがですか? 出力したい二次元配列が表示されますか?
meg_

2022/10/05 12:47 編集

すみません。記入場所を間違えました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問