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

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

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

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

Q&A

解決済

2回答

1077閲覧

pythonの文法について(np.mean()など)

HIROKIKATO

総合スコア5

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

0グッド

0クリップ

投稿2019/09/18 08:42

疑問点

ndarray形式の平均値を取りたい場合に、下のコードの変数でいうimg_mean, img_mean2の2パターンがあると思います。
なぜこのimg_mean2では、np.が必要なくなるのか疑問に思っているため教えて頂けると幸いです。

また平均をとる場合はimg.mean()のように()が必要に対して、np.shapeを使う場合に、img.shape()の()が必要ないのでしょうか?
(むしろ()をつけるとエラーがでるのはなぜか)

該当のソースコード

import numpy as np img=np.array([[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]) img_mean=np.mean(img) img_mean2=img.mean() v,h=img.shape

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

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

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

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

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

guest

回答2

0

ベストアンサー

なぜこのimg_mean2では、np.が必要なくなるのか疑問に思っているため教えて頂けると幸いです。

np.meannumpyモジュールの属性として直接定義された関数であり、img.meanはnumpy配列オブジェクト(そう言って差し支えないような型は数種類ありますが、今回であればnumpy.ndarrayクラスのオブジェクト)のメソッドです。なので、文法的にどちらでも良いのではなくて、モジュールの関数としてもオブジェクトのメソッドとしてもmeanが定義されているだけ、と解釈しておくのがいいでしょう。
(インターフェイスの違いだけで内部のコアはおそらく共通だと思いますが)

実際それぞれ別物としてドキュメントの項目が立てられています。
numpy.mean — NumPy v1.17 Manual
numpy.ndarray.mean — NumPy v1.17 Manual

また平均をとる場合はimg.mean()のように()が必要に対して、np.shapeを使う場合に、img.shape()の()が必要ないのでしょうか?

shapeはメソッドではなく属性だからです。
(ただし、よくある単純な属性ではなくプロパティを使って実装されているはずです)

numpy.ndarray.shape — NumPy v1.17 Manual


回答してて思ったのですが、Pythonのオブジェクト指向プログラミングを知らないと意味不明かもしれません。よくわからなければ、先にPythonのオブジェクト指向の仕組みを学んだ方が良いです。

投稿2019/09/18 08:51

hayataka2049

総合スコア30933

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

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

HIROKIKATO

2019/09/21 03:01

回答ありがとうございます。 私もこの問題はオブジェクト指向の仕組みによるものだと思っていたのですが、何から調べれば解決できるかわからなかったのできっかけを頂けて助かりました!
guest

0

回答

なぜこのimg_mean2では、np.が必要なくなるのか疑問に思っているため教えて頂けると幸いです。

img オブジェクトは ndarray 型ですが、
ndarray クラスのメソッドに mean があるので、img.mean() と呼び出すことができます。

numpy.mean — NumPy v1.17 Manual
numpy.ndarray.mean — NumPy v1.17 Manual

np.shapeを使う場合に、img.shape()の()が必要ないのでしょうか?

shape は ndarray クラスの attribute であり、関数でないので、() で呼び出す必要はありません。

numpy.ndarray.shape — NumPy v1.17 Manual

投稿2019/09/18 08:49

編集2019/09/18 08:50
tiitoi

総合スコア21956

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

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

HIROKIKATO

2019/09/21 03:07

とても端的に説明していただき非常にわかりやすくありがとうございます。 ndarrayのクラスにもmeanが存在するのですね。何かのルール(仕組み?)によってnp.が省略できるのだと思っておりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問