
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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) listへのappendが出来ない件 1 2022/12/06 21:44
- 計算機科学 Pythonに関する質問です。 1 2022/12/04 10:55
- 工学 Pythonの3次元描画に関する質問です 3 2022/12/07 20:07
- その他(プログラミング・Web制作) pythonのバージョン変更に関する質問 1 2023/02/14 11:39
- その他(プログラミング・Web制作) gymのカートポールプログラム 1 2022/05/01 13:02
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- 数学 2*2の行列に対して固有値の最大実部を与えるkの値を求めたい 3 2022/11/08 16:26
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# データの外挿について 3 2023/06/13 20:46
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数独かを判断するプログラム
-
読み(あ行~わ行)ごとに分け...
-
行列
-
STLのvectorで作った配列をメン...
-
C言語 最大値と最小値を求めて...
-
bashで配列から、特定の要素を...
-
CArrayのソート
-
class内部でarray_mapをつかう...
-
同一列内のセルを結合して表示...
-
濁点のソート
-
cakephpでのトランザクション処...
-
PHPは何故値渡しより参照渡しの...
-
一つのカラムから、データを分...
-
2次元配列への標準入力
-
再帰関数を用いて配列の合計を...
-
配列の要素(value)に、変数を...
-
C言語の配列をPush(追加)する...
-
配列を指定した順序でソート
-
多次元配列からxmlツリーを作成...
-
$_SESSIONに二次元配列を使える...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
行列
-
配列の要素(value)に、変数を...
-
PHPのmin関数、「1」以上の数値...
-
読み(あ行~わ行)ごとに分け...
-
特定の文からメールアドレスの...
-
C言語 最大値と最小値を求めて...
-
STLのvectorで作った配列をメン...
-
多次元配列をエンコードする関...
-
配列の添え字が小数だとどうなる?
-
配列を指定した順序でソート
-
MYSQLとPHPによって取得する多...
-
CArrayのソート
-
CArrayの要素としてCStringArra...
-
array_intersectで空欄を比較し...
-
連想配列から<th>を含むテーブ...
-
多次元配列からxmlツリーを作成...
-
cakephpでのトランザクション処...
-
verilogで、配列の一部をタスク...
-
np.stack()とnp.array()の違い
おすすめ情報
TypeError: 'numpy.ndarray' object is not callable
のエラーが出ます。
min -> m
にしても同じエラーが出るようなのですが?
ごめんなさい!!
pythonのインターラクティブシェルを立ち上げ直したらうまくいきました。
pythonは3系を使っています。
mask = (a < m)
m[mask] = a[mask]
でも動くようですが、maskの情報をif()文に取り込んで、書くようなことってできないのでしょうか?