
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を探す
今、見られている記事はコレ!
-
プログラミングを学べる!?進化している子どものおもちゃについて専門家に聞いた!
プログラミングを学べるレゴブロックがあることはご存知だろうか。レゴに限らず最近のおもちゃには、プログラミングの要素がどんどん取り入れられているようだ。「教えて!goo」にも、「プログラミングを学べる子供...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
array_mapの再帰処理がうまく行...
-
ファイルの書き込みについて教...
-
PHPで2次元配列を1次元配列に...
-
php 1桁になるまでの和 スマー...
-
CArrayの要素としてCStringArra...
-
Eclipseコンテンツアシストでプ...
-
プルダウンメニューにDBの内容...
-
別ファイルの構造体の値を読み...
-
phpでcsvファイルから二次元配...
-
$_SESSIONに二次元配列を使える...
-
配列をループでたくさん宣言し...
-
foreachのなかで次のキーを参照...
-
配列同士の足し算のループ処理
-
エラーメッセージ(無効な間接...
-
C言語でCSVファイルの行数を読...
-
phpでCSVファイルの中身を多次...
-
parse_ini_file関数について
-
postgresql関数をつかったレコ...
-
FortranのOPEN文
-
fgetsを使ってcsvからcsvに
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
cakephpでのトランザクション処...
-
行列
-
読み(あ行~わ行)ごとに分け...
-
特定の文からメールアドレスの...
-
c言語 単位行列
-
STLのvectorで作った配列をメン...
-
多次元配列をエンコードする関...
-
2次元配列を1次元配列にするには
-
phpで、配列の値が意図せず変わ...
-
Delphiで別unitで宣言した「TAr...
-
連想配列に追加ってできるン?
-
正規表現
-
配列の並びについて
-
PHPでCSVを出力するさいに、ル...
-
pascalについて知りたいのです...
-
文字列の取得について
-
ファイルの書き込みについて教...
-
数独かを判断するプログラム
-
文字列の並び替え
おすすめ情報
TypeError: 'numpy.ndarray' object is not callable
のエラーが出ます。
min -> m
にしても同じエラーが出るようなのですが?
ごめんなさい!!
pythonのインターラクティブシェルを立ち上げ直したらうまくいきました。
pythonは3系を使っています。
mask = (a < m)
m[mask] = a[mask]
でも動くようですが、maskの情報をif()文に取り込んで、書くようなことってできないのでしょうか?