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

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

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

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

Q&A

解決済

1回答

1647閲覧

Python3 フォルダ内から画像をランダムに50枚選択したい

SuzuAya

総合スコア71

Python 3.x

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

0グッド

0クリップ

投稿2019/04/30 03:00

編集2019/04/30 05:55

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
画像が100枚入っているフォルダから50枚ずつ読み込み、numpy配列に変換してnpyファイルを保存する処理を2回するコードを書いています。
コード実行後、npyファイルはちゃんと2つ保存されていたのですが、中身を見るとそれぞれ100枚ずつ保存されているようでした。
rn.sampleでフォルダ内からランダムに50枚選択するようにしていたのですが、書き方が間違っているでしょうか。
お忙しいところ恐れ入りますが修正方法についてアドバイスをいただけますと幸いです。

該当のソースコード

img_size = (1000, 500) dir_name ='./train file_type = 'jpeg' img_list = glob.glob('./' + dir_name + '/*.' + file_type) for i in range(2): train_img_array_list = [] rn.sample(img_list, 50) #iが1増加するたび、ランダムに選択した50枚の画像を読み込み for img in img_list: train_img = load_img(img,grayscale=True,target_size=(img_size)) train_img_array = img_to_array(train_img) /255 train_img_array_list.append(train_img_array) train_img_array_list = np.array(train_img_array_list) file_name = os.path.join('.', 'image'+'{0:04d}'.format(i)+'.npy')#連番でnpyファイルを保存 np.save(file_name, train_img_array_list)

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

mac PCからGoogle colabを利用して実装しています。
stack overflowでも同じ質問をしています。
どちらかでご回答をいただきましたら、共有をさせていただきます。
https://ja.stackoverflow.com/questions/54595/python3-%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E5%86%85%E3%81%8B%E3%82%89%E7%94%BB%E5%83%8F%E3%82%92%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%81%AB%EF%BC%95%EF%BC%90%E6%9E%9A%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%9F%E3%81%84

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

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

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

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

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

SuzuAya

2019/04/30 05:45

ありがとうございます。teratailではマルチポストは推奨されていないのですね。質問を編集させて頂きます。
LouiS0616

2019/04/30 06:17 編集

『こちらでご回答が得られなかったため』とは、どういう意味でしょうか。StackOverflowでの質問投稿時刻は日本時間で13時過ぎですから、私が既に回答していますが。 追記: この投稿は14:47に修正された質問内容に対するものです。現在では次のように『誤字』が修正されています。『誤字』が。 https://teratail.com/questions/history-questions/187075 メモ: およそ15:12にBAが付きました。
quickquip

2019/04/30 06:15 編集

「コードの始めに、import random as rnとしてインポートしています。」という情報が向こうに追記されていないため、向こうで回答者に対して余計な(=本来必要がない)推測をさせた上で同じ内容の別の回答が付いちゃってますよね。こちらで判明した事実や足りない部分をちゃんと共有してください。マルチポストというのは、そうやって他人の時間や労力を無自覚に奪うのです。それとページが2つあることは事例を後から検索する人の時間も奪います。teratailの指針はリーズナブルだと思っています。
guest

回答1

0

ベストアンサー

rnには標準randomモジュールが束縛されているのでしょうか。
それならば、img_list = rn.sample(img_list, 50) のように返り値を受け取る必要がありますね。

######random.sample(population, k)

母集団のシーケンスまたは集合から選ばれた長さ k の一意な要素からなるリストを返します。重複無しのランダムサンプリングに用いられます。

引用元:Python 標準ライブラリ » random

投稿2019/04/30 03:07

LouiS0616

総合スコア35658

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

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

SuzuAya

2019/04/30 03:10

ご確認ありがとうございます。 説明が不足しており失礼しました。コードの始めに、import random as rnとしてインポートしています。 >img_list = rn.sample(img_list, 50) のように返り値を受け取る必要がありますね。 上述の通りコードを記載しておりますが、どこを修正すればうまく動くのでしょうか。
LouiS0616

2019/04/30 03:34

rn.sampleを呼び出しているところです。 呼び出すだけではなく、返り値を再代入してやる必要があるのです。
SuzuAya

2019/04/30 03:59

確認ばかりで大変恐縮なのですが、「呼び出すだけではなく、返り値を再代入してやる必要がある」というご説明がよく理解できておりません…。 以下のように修正してみましたが、いずれもうまくいきませんでした。 img_list = rn.sample(./' + dir_name + '/*.' + file_type, 50) img_list = rn.sample('./train', 50) img_list = rn.sample('./train/*.jpeg', 50) お手数をおかけして申し訳ありません。
LouiS0616

2019/04/30 04:02

rn.sample(img_list, 50) の行を img_list = rn.sample(img_list, 50) に代えてやれば良いです。 ちょっとコードを書く練習をした方が良いかもしれませんね。既存のコードを改造するだけだと案外身に付かないのです。
SuzuAya

2019/04/30 05:53

アドバイスを頂いた通りに修正してみましたが、うまくいきませんでした。自分でもコードを書く練習をしながら、解決方法について考えてみます。お手数をおかけしました。
SuzuAya

2019/04/30 06:14

google colabのランタイムが切れてしまっていたようで、再接続の上、教えて頂いた通りにコードを修正したらうまくいきました。ご対応ありがとうございました。LouiS0616さんに解答を頂く直前にマルチポストをしておりましたが、ご不快な思いをされていたら申し訳ありません。貴重なお時間を割いていただき、ありがとうございました。
LouiS0616

2019/04/30 06:21

StackOverflowの質問時刻は04:06:40Zになっており、これは日本標準時では13:06:40に相当します。 回答の後、既にコメントが二往復している時刻です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問