No.5ベストアンサー
- 回答日時:
> maskの情報をif()文に取り込んで、書くようなこと
うーん、こういう風にしたいんですかね?
>>> m = np.array([10, 10, 10])
>>> a = np.array([3, 5, 11])
>>> mask = (a < m)
>>> i = 0
>>> for test in mask:
if test:
m[i] = a[i]
i += 1
>>> m
array([ 3, 5, 10])
>>>
これは結局、
>>> mask = (a < m)
>>> mask
array([ True, True, False], dtype=bool)
とmaskはTrue、Falseで構成されたarrayになって、またnumpyが提供するarrayがiterableだから、ですよね(for文を使って情報を取り出す事が出来る)。
まあこうやって出来なくはないんですが・・・・・・。
ただまあ、冗長ですよね。
個人的にはやっぱり #1 でやったやり方がPythonらしいと思います。
ポイントは2つ。
1. 題意ではデータが、m、a、と2つ与えられていて、mを「書き換える」主旨になっているが、可能ならば、与えられたデータは直接変更しない方が現代的である。
これはここで紹介した改造版でもそうなんですが、元々mを「書き換える」前提になっています。破壊的変更、って呼ぶんですが。
ただ、現代的な感覚だと、mを「書き換える」のではなくって、新しく「解を生成して」返した方がより良いですね。
何故かと言うと、プログラミングしたプログラムが大きくなるにつれ、データの「破壊的変更」をガンガンやっていくと、どこでデータが「変更」されたか分からなくなってバグの温床になる可能性が高いから、です。
PythonはC言語等と違い、ガベージコレクタを持ってるんで、「使われなくなったデータ」はゴミとして回収されてメモリを圧迫するような構造にはなってないんで、Pythonを使う以上、ガベージコレクションをアテにした「現代的な」プログラミングをまずしてみるのが吉、だと言う事です。
2. Pythonの内包表記は速い。
Python3にはリスト内包表記を始めとしていくつか内包表記が提供されています。
#1 のコードも内包表記で書いてますが、フツーにfor文で回すより速い、つまり最適化が成されています。
これは、以前にも別のトコで書いてますが、要するにPythonの開発者達が
「内包表記を使ってくれ」
と言ってる、メッセージですね。
扱うデータがリスト等のコレクションである、なおかつfor文やif文を使わないといけない、ってなった場合、まず最初に使おう、って考えるのはPythonだと「内包表記」です。
内包表記で上手く行きそうにない場合、初めてfor文等を登場させる、ってのがむしろ一番Python臭い解決法ですね。
No.3
- 回答日時:
さぁ、そうなると分からんですね。
こっちだと「上手く動いてる」としかいいようないです。
ちなみにこっちの環境だとPython 2.7.12、OSはLinuxですが、Python3.x系を使ってるんですかね?
(毎回言ってますが、Pythonの質問を投げる場合、2.x系なのか3.x系なのか付加しないと、ちょこちょこつまらんトコで引っかかります)
No.2
- 回答日時:
min、はPythonの組み込み関数名なんで、変数名には使わないほうがいいですよ。
# ダメな例
>>> import numpy as np
>>> min = np.array([10,10,10]) # これはやらん方が良い
>>> a = np.array([3,5,11])
>>> np.array([min(x) for x in zip(min, a)])
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
np.array([min(x) for x in zip(min, a)])
TypeError: 'numpy.ndarray' object is not callable
>>>
No.1
- 回答日時:
>>> import numpy as np
>>> m = np.array([10, 10, 10])
>>> a = np.array([3, 5, 11])
>>> np.array([min(x) for x in zip(m, a)])
array([ 3, 5, 10])
>>>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アセンブリ言語について。
-
フロントエンドエンジニアをし...
-
Google ColaboでGUI作成
-
AIのプログラムについて教えて...
-
プログラミングについて プログ...
-
プログラミングの進学について
-
vba クリップボードクリアにつ...
-
プログラミングのやり方ざっく...
-
fortran write文について マチ...
-
コトリン言語について。
-
このURLで広告を出しているのは...
-
python エラー
-
Pythonでgif画像が上手く作れない
-
pythonで複数画像からgifを作る...
-
Gitについて質問。 クローンし...
-
HTMLソースが表示のページのも...
-
batファイル、コマンドプロンプ...
-
Google Colabでimport soxが出...
-
プログラミングを学ぼうと思い...
-
paiza python03 ランクC獲得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
行列
-
np.stack()とnp.array()の違い
-
2次元配列CSVのソート
-
配列の要素(value)に、変数を...
-
C言語 最大値と最小値を求めて...
-
STLのvectorで作った配列をメン...
-
特定の文からメールアドレスの...
-
CArrayのソート
-
MYSQLとPHPによって取得する多...
-
ファイルの書き込みについて教...
-
verilogで、配列の一部をタスク...
-
CArrayの要素としてCStringArra...
-
array_intersectで空欄を比較し...
-
pg_copy_fromの使い方について...
-
構造体を動的に確保&解放
-
同一列内のセルを結合して表示...
-
cakephpでのトランザクション処...
-
c言語 単位行列
-
読み(あ行~わ行)ごとに分け...
おすすめ情報
TypeError: 'numpy.ndarray' object is not callable
のエラーが出ます。
min -> m
にしても同じエラーが出るようなのですが?
ごめんなさい!!
pythonのインターラクティブシェルを立ち上げ直したらうまくいきました。
pythonは3系を使っています。
mask = (a < m)
m[mask] = a[mask]
でも動くようですが、maskの情報をif()文に取り込んで、書くようなことってできないのでしょうか?