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

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

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

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

Q&A

解決済

2回答

936閲覧

Pythonでファイルを標準化したい

odenhanpen

総合スコア5

Python

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

0グッド

0クリップ

投稿2021/12/14 08:05

前提・実現したいこと

プログラミング初心者です。
Pythonでフォルダ内の複数の.npyファイルを標準化するシステムを作っていたところ以下のエラーメッセージが発生しました。
調べてみたのですが、エラーに対する改善方法がやはり分からなかったので質問させていただきました。
また、もし他にもプログラムで至らない点などございましたら、そちらもご教授いただきたいです。
よろしくお願いいたします。

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

AttributeError: 'str' object has no attribute 'mean'

該当のソースコード

Python

1import os 2os.chdir('/content/drive/MyDrive/') 3import sys 4import numpy as np 5import glob 6 7paths = glob.glob(os.getcwd() + '/feature/Session*/data/*.npy') 8print(paths) 9 10def zscore(x): 11 xmean = x.mean() 12 xstd = np.std(x) 13 zscore = (x-xmean)/xstd 14 return zscore 15 16def main(): 17 for x in paths: 18 a = x 19 b = zscore(a) 20 print(b) 21 print(paths) 22 23if __name__ == '__main__': 24 main() 25 print ('><')

試したこと

各dataファイルの中には.npyファイルしか入っていなかったため、初めはpathを、dataファイルまでで記述していました。
しかし、エラーは出ないものの空リストになってしまったため、ファイル名までを指定したところ、こちらのエラーが出てしまいました。

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

Google Colabで実行しています。

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

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

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

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

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

guest

回答2

0

処理が足りません。

python

1paths = glob.glob(os.getcwd() + '/feature/Session*/data/*.npy') 2 3def zscore(x): 4 xmean = x.mean() 5 xstd = np.std(x) 6 zscore = (x-xmean)/xstd 7 return zscore 8 9def main(): 10 for x in paths: 11 a = x 12 b = zscore(a) 13 print(b)

paths には、対象のファイルのパス、これは文字列ですね、のリストが入っています。

main()の中で、それをひとつづつ、取り出して、x に入れ、 a にも入れ、それを、zscoer()に渡しています。 aに入っているのはファイルのパス文字列です。

zscore() では、仮引数xで受け取っていて、それのmean()を取ろうとしています。

文字列には平均はありませんのでエラーになりまうs。

zscoer()に渡すのはたぶんファイル名でなくて、その中身でしょうから、中身を取り出して、それを加工してzscore()に渡してやる必要があるでしょうね。

投稿2021/12/14 09:13

TakaiY

総合スコア12832

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

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

odenhanpen

2021/12/14 09:58

ご回答ありがとうございます。すごく分かりやすい説明で理解することができました。ありがとうございます!
guest

0

ベストアンサー

エラーコードのままです。
渡しているのはあくまでファイルのパスであって、ファイルの中身ではないです。
なので、npyファイルの中身をndarrayにして読み込む処理をして、それを渡します。

python

1 2def main(): 3 for x in paths: 4 a = np.load(x) 5 b = zscore(a) 6 print(b) 7 print(paths) 8

投稿2021/12/14 09:01

編集2021/12/14 09:02
irognodyci

総合スコア227

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

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

odenhanpen

2021/12/14 09:57

ご回答ありがとうございます。うまく処理できました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問