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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

Python

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

Q&A

解決済

3回答

2221閲覧

forループで回した各値を保存してグラフ化したい

taketake1108

総合スコア2

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

Python

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

0グッド

0クリップ

投稿2021/12/15 03:37

編集2021/12/15 04:48

データフレームに保存してあるリストのデータを各値を変数として数値計算したものを出力したものを格納(リスト化)してグラフにしたいです.
各値はforループで出力できるのですが,その値を .append() を用いて保存しようとしてもエラーがおきてしまいます.

σD[]とσA[]はCSVファイルから取ってきたものを配列にしました.
kA,kFRET,kD,Iは別の場所で計算した数値です.
ちなみに
kA =333333333.3333333
kD =256410256.4102564
kFRET = 22988510524.344707
I = 30

醜いコードで申し訳ないです.足りないところがあれば教えてください.

python

1#吸収断面積 2import pandas as pd 3df = pd.read_csv('Alexa Fluor 594 spectrum.csv') 4 5f = lambda x: ((3.823e-23)*805*x)#ε=εA/maxドナーのモル吸光係数 6 7df['Excitation'].apply(f) 8 9σD = [] 10σD = df['Excitation'].apply(f) 11 12 13print(σD) #吸収断面積(ドナー)を入手 14 15df = pd.read_csv('Cy5 spectrum.csv') 16 17f = lambda x: ((3.823e-23)*2500*x)#ε=(εAモル吸光係数のピーク/max励起スペクトルのピーク) 18 19df['Excitation'].apply(f) 20 21σA = [] 22σA = df['Excitation'].apply(f) 23 24 25print(σA) #吸収断面積(アクセプタ)を入手 26 27 28λ = [] 29E1_analy = [] 30E2_analy = []#グラフ用配列を用意 31 32λ = 0 33 34while λ < 650: 35 36 E1_analy = σD[λ]*I/(kFRET+kD) 37 E2_analy = (1/kA)*(kFRET*E1_analy+σA[λ]*I) 38 39 λ += 1 40 41 E1_analy.append() 42 E2_analy.append() 43 44 print(λ) 45 print(E1_analy) 46 print(E2_analy) 47 48 49 50plt.plot(λ,E1_analy) 51plt.plot(λ,E1_analy) 52plt.legend() 53plt.show() 54

AttributeError Traceback (most recent call last)
<ipython-input-105-5a762b03f8b9> in <module>
12 λ += 1
13
---> 14 E1_analy.append()
15 E2_analy.append()
16

AttributeError: 'numpy.float64' object has no attribute 'append'

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

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

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

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

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

1T2R3M4

2021/12/15 04:08

AttributeError: 'numpy.float64' object has no attribute 'append' の意味は理解されていますか。
taketake1108

2021/12/15 04:30

計算結果が少数なのでappendの性質上使えないという意味ですかね.
jbpb0

2021/12/15 05:02 編集

E1_analy = σD[λ]*I/(kFRET+kD) E2_analy = (1/kA)*(kFRET*E1_analy+σA[λ]*I) ↓ 変更 tmp = σD[λ]*I/(kFRET+kD) tmp2 = (1/kA)*(kFRET*tmp+σA[λ]*I) E1_analy.append() E2_analy.append() ↓ 変更 E1_analy.append(tmp) E2_analy.append(tmp2) print(E1_analy) print(E2_analy) ↓ 変更 print(tmp) print(tmp2) で、どうでしょうか? 【追記】 上記は、 > 'numpy.float64' object has no attribute 'append' の対策のみです 「λ」も、計算に使った数値を全部格納するリストを作ってそれに格納しておかないと、上記エラーが直っても、「plt.plot(λ,E1_analy)」でエラー出ると思います
taketake1108

2021/12/15 05:03

ありがとうございます!やってみたのですがやはりfloatなので計算できない表示されてしまいます. ---> 10 tmp2 = (1/kA)*(kFRET*E1_analy+σA[λ]*I) 11 12 λ += 1 TypeError: can't multiply sequence by non-int of type 'float'
jbpb0

2021/12/15 05:20 編集

tmp2 = (1/kA)*(kFRET*E1_analy+σA[λ]*I) ではなくて tmp2 = (1/kA)*(kFRET*tmp+σA[λ]*I) です 【追記】 下記はエラー出ずに計算できます kA =333333333.3333333 kD =256410256.4102564 kFRET = 22988510524.344707 I = 30 σD = [0, 0, 0] σA = [0, 0, 0] E1_analy = [] E2_analy = [] λ = 0 tmp = σD[λ]*I/(kFRET+kD) tmp2 = (1/kA)*(kFRET*tmp+σA[λ]*I) E1_analy.append(tmp) E2_analy.append(tmp2) λ += 1 tmp = σD[λ]*I/(kFRET+kD) tmp2 = (1/kA)*(kFRET*tmp+σA[λ]*I) E1_analy.append(tmp) E2_analy.append(tmp2) 上記はwhileループにはしてませんが、whileループの最初の2回と実質同じですから、ループでもっと回しても大丈夫なはずですよね
taketake1108

2021/12/15 05:47

ありがとうございます!何とか数値結果は出てきました!大変参考になりました.λを同じようにリストに格納するにはfor文の中にλ.append(λ)を入れたのですが---> 15 λ.append(λ) 16 E1_analy.append(tmp) 17 E2_analy.append(tmp2) AttributeError: 'int' object has no attribute 'append' となってしまいました.tmpを用いてどっかに格納するべきなのでしょうか?
jbpb0

2021/12/15 07:39 編集

ループ内で計算に使った「λ」を全部格納するリストの名前は、「λ」ではダメです 他の名前で作っておかないと λ = [] ↓ 変更 λall = [] λ += 1 のすぐ上に下記を追加 λall.append(λ) plt.plot(λ,E1_analy) plt.plot(λ,E1_analy) ↓ 変更 plt.plot(λall, E1_analy) plt.plot(λall, E2_analy) みたいな感じ (実行させて確認してないので、何か見落としがあるかも)
jbpb0

2021/12/15 07:40

あと、 λ += 1 は print(λ) よりも後にしないと、printで表示されるのが一つずれますよ
taketake1108

2021/12/15 08:19

ありがとうございます! 参考にしたらグラフを出力することができました!!感謝感謝です!
guest

回答3

0

折角ですからデータフレームを使ってみます。

python

1import matplotlib.pyplot as plt 2import pandas as pd 3 4λex = 1 5kA = 333333333.3333333 6kD = 256410256.4102564 7kFRET = 22988510524.344707 8I = 30 9 10#吸収断面積 11df = pd.read_csv('Alexa Fluor 594 spectrum.csv') 12σD = df['Excitation'] * (3.823e-23)*805 13E1_analy = σD*I/(kFRET+kD) 14 15#吸収断面積(アクセプタ) 16df = pd.read_csv('Cy5 spectrum.csv') 17σA = df['Excitation'] * (3.823e-23)*2500 18E2_analy = (1/kA)*(kFRET*E1_analy+σA*I) 19 20#描画 21E1_analy.plot(label='Excitation(E1)') 22E2_analy.plot(label='Excitation(E2)') 23 24plt.legend() 25plt.show()

λex が未定義です

投稿2021/12/15 04:26

melian

総合スコア19771

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

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

taketake1108

2021/12/15 04:37

回答ありがとうございます!ただλexが0から649まで変化していったときのE1_analyとE2_analyを取得したいです.appendではうまくいかない(計算結果が少数float型だからか)ようなので何に保存したら良いのかよくわからなくて,,,
melian

2021/12/15 04:43

ええと、λex が変化しても E1_analy と E2_analy は全く変化しません。
taketake1108

2021/12/15 04:45

σD[λ]σA[λ]となっておりλの値で変化するようになっています!分かりづらくてすみません.
melian

2021/12/15 04:49

すみませんが、おっしゃっている意味がよく判りません。。。できれば質問に記載されているプログラムコードを変更して下さい。
guest

0

ベストアンサー

python

1λ = []

↓ 変更

python

1λall = []

 .

python

1 E1_analy = σD[λ]*I/(kFRET+kD) 2 E2_analy = (1/kA)*(kFRET*E1_analy+σA[λ]*I)
↓ 変更

python

1 tmp = σD[λ]*I/(kFRET+kD) 2 tmp2 = (1/kA)*(kFRET*tmp+σA[λ]*I)

 .

python

1 E1_analy.append() 2 E2_analy.append()
↓ 変更

python

1 λall.append(λ) 2 E1_analy.append(tmp) 3 E2_analy.append(tmp2)

 .

python

1 print(E1_analy) 2 print(E2_analy)
↓ 変更

python

1 print(tmp) 2 print(tmp2)

 .

python

1plt.plot(λ,E1_analy) 2plt.plot(λ,E1_analy)

↓ 変更

python

1plt.plot(λall, E1_analy) 2plt.plot(λall, E2_analy)

 .
下記を「while λ < 650:」ループの最後に移す

python

1 λ += 1

投稿2021/12/20 06:42

jbpb0

総合スコア7651

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

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

0

AttributeError: 'numpy.float64' object has no attribute 'append'

'numpy.float64'の変数には、'append'というアトリビュートは存在しません、とおっしゃってます。
これをどーにかしよう

投稿2021/12/15 04:11

y_waiwai

総合スコア87774

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問