【まず1嫁】くだすれPython(超初心者用) その53

■ このスレッドは過去ログ倉庫に格納されています
2021/03/16(火) 07:19:44.36ID:PfTIXkDh
当スレに★Python以外のプログラミング言語での回答類を書くべからず★
派生言語はそれぞれ専スレがあるのでそっち池。
「Ruby」「某言語では」をNGワード登録推奨。荒らしは、完全スルー放置が一番きらいです。

このスレッドは「お勉強」スレのほうには書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を、勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますので、お礼は Python の布教と初心者の救済をお願いします。

★エラーを解決したい場合は、
  表示されてるエラー全文(勝手に省略やスクショうp等の横着クソ行為禁止)と、
  実行環境(Pythonのバージョン・OSとIDEの種類とバージョン)をシッカリ書くこと。

Pythonの★ソースコードをそのまま5ちゃんにコピペすると、インデントが崩れてチヌ★
5chの仕様【【【複数の連続半角スペースはなにもなかったことにされる&タブは普通には入れられない】】】のため、どうにもなりましぇん。
↓等の、いわゆるコードうp用サイトに貼ってこいください。
ttps://techiedelight.com/compiler/  Run Code機能あり。
ttp://ideone.com/      デフォ設定はC用のため、言語選択ボタン押下がピコ手間かも。
ttp://codepad.org/      ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Python公式サイト◇ http://www.python.org/
◇まとめwiki◇ ttp://python.rdy.jp/wiki.cgi

〇前スレ〇 くだすれPython(超初心者用) その52【まず1嫁】
https://mevius.5ch.net/test/read.cgi/tech/1610137345/

次スレは >>985 あたりが挑戦してくだしあ。(980過ぎて自動落ちは、無くなって久しい)
### END OF TEMPLATE ###
2021/03/20(土) 09:08:07.43ID:nt8Be5Ib
>>29-30
ありがとうございました。
32デフォルトの名無しさん
垢版 |
2021/03/20(土) 21:03:20.71ID:cHAvtLAs
print(range(3))
と一行書いて実行すると、
0 1 2
と表示されるはずなのに
range(0, 3)
としか表示されない。どうしてでしょうか。
2021/03/20(土) 21:12:13.24ID:cHAvtLAs
>>32 は自己解決しました
2021/03/20(土) 21:41:21.50ID:GfnHrk+w
オブジェクトだからさ。
2021/03/20(土) 23:09:48.82ID:SzdWYV/s
好きなだけ広い範囲を取れるぞ!
好きなだけ取って楽しめよ!
36デフォルトの名無しさん
垢版 |
2021/03/21(日) 00:41:47.55ID:c1Fm1qtl
>>32
もしrange(5000兆)とかがその場で展開されたらメモリが足りなくなるから
必要になってから都度計算するrangeオブジェクトっていうオブジェクトになる
2021/03/21(日) 01:15:24.00ID:ba25SXqE
自己解決したと書いてるのに、蘊蓄を披露するのが我慢できない人達
2021/03/21(日) 03:30:01.28ID:Duyg5pmm
蛇だけに!
2021/03/21(日) 07:55:22.35ID:Xyvra8tZ
「じゃあ」ってか

>>37
自己解決のさいは
なにしたら解決できたか書いて毛なのに
むしろ質問者は書いていかないし
2021/03/21(日) 08:02:45.18ID:rOmbGrT+
このくらいは質問する前に気づいて欲しいな
そしたら蘊蓄披露したがりクンも沸いてこなかった
つまり質問者が悪い
41デフォルトの名無しさん
垢版 |
2021/03/21(日) 09:50:58.07ID:c1Fm1qtl
>>37
Rubyでは、・・・
とか言い出すよりマシだろ?
2021/03/21(日) 10:50:14.27ID:ba25SXqE
すまん、俺が悪かった。
2021/03/21(日) 10:56:39.10ID:eocPnEKi
「オブジェクトだから」だと思ってる人達は文字列(str)はオブジェクトじゃないと思ってるのかな?

range(0, 3)と表示される仕組みを理解してるとは思えないんだが
2021/03/21(日) 11:10:46.35ID:dweFEPRe
inとか調べるのがノーコストになるというのはインフォマティブだよ
コンテナ実装するときにふと思い出してくれればよい
2021/03/21(日) 11:17:17.80ID:dweFEPRe
俺もついでにくだを巻いていくけどrangeだけなら整数2つ持ってるのと大差ない(lo<=i <hiと等価)が
rangeが生きるのはもっと複雑なテスト、rangeはchainsで数珠繋ぎにして生きる
46デフォルトの名無しさん
垢版 |
2021/03/21(日) 11:21:05.88ID:GVEcec50
Juliaというプログラミング言語がいいという話ですが、Pythonに詳しい人はPythonと比較してJuliaについてどう思いますか?
2021/03/21(日) 11:31:49.59ID:ECrDs+gQ
ブーム前はFortran/Matlab(&Octave)と同じ感覚で配列を自在に扱える代替環境ってのがPython/numpyの需要だったのよ
numpy/scipyはFortranライブラリのラッパ集として始まったわけで
今はもうPythonは手軽なスクリプト言語はじめ色んな用途が開けてるから、古い感覚だけどね

C風のPythonし、結局Fortran民はJuliaを作ったわけだけど
まあPythonでいい
2021/03/21(日) 11:42:30.17ID:ECrDs+gQ
文書がバグってた…
Pythonは配列0始まり/メモリ配置行メジャーのC系の慣習を引きずってる
線形代数記法、つまり配列1始まり/メモリ配置列メジャーの数値計算の慣習と逆ってことね
新興で後者採用のFortran系の言語はJuliaくらいしかないのでそっちに慣れてるオッサンならjuliaの方が受け入れやすいと想う
2021/03/21(日) 11:51:31.81ID:ECrDs+gQ
Pythonも不便ということはないよ
生Pythonで配列扱うmemoryviewやctvpesにちゃんと'F'フラグ容易されてるし
numpyももちろんそうで、FortranコードをPython関数として簡便コンパイルするf2py.pyもある
自身をコンパイルする為だけど、もちろんユーザーも使える
2021/03/21(日) 11:59:02.49ID:Duyg5pmm
numpy入れるとコマンドラインからf2py直接呼べるようになってるね
比較的小さいスクリプトだけど、これこそがnumpyの本体
2021/03/21(日) 13:02:14.02ID:ba25SXqE
超初心者スレでそのネタを書く?
マウンティングが目的?
2021/03/21(日) 13:16:37.33ID:Duyg5pmm
PythonとJulia比べるならそこの違いだろうよ
Pythonでよろしい、潰しも効くし
2021/03/21(日) 13:20:42.89ID:M5Jy6lC/
pandasで時系列データを集計やソートしたりするのですが
df = pd.DataFrame([{'p':1,'at':日付オブジェクト1},{'p':3,'at':日付オブジェクト2},,,])
時系列データフレームとして扱うためにインデックスを設定
df2 = df.set_index['at']
df2.resample('H').sum()
で無事、時系列であれこれできました

で、これをsqlite3にappendしようとしたとき
このインデックスが時系列のままsqliteにappendすればいいのか
時系列は'at'カラムに移動させてからsqliteにappendすればいいのか迷っています
ぶっちゃけどちらでもいいとは思いますが
公開されている統計データなどをみていると大抵は、(インデックスは無しか連番で)カラムに日付データが入っているので
そういう慣習でもあるのかが気になります
2021/03/21(日) 13:38:24.45ID:11DwdO6F
>>41
メモリアロケーションされてるかどうかなんて全く関係ない理由をあげて間違った理解を植え付けるくらいなら
Rubyでは・・・のほうがまだマシだわ
55デフォルトの名無しさん
垢版 |
2021/03/21(日) 13:49:42.36ID:c1Fm1qtl
質問者はrangeをlistかtupleと同一視していると思われたから、どちらでも無い別種のオブジェクトだと教えたまでだが問題あったか?
(メモリアロケーション云々は何故rangeがlistを返さないかの説明に過ぎない)

いきなり__repr__の実装に言及しても訳分からんだろ
2021/03/21(日) 13:52:10.61ID:b+/7pFI3
0 1 2 と表示される方法を知りたかったのかも知れない。
2021/03/21(日) 14:24:12.67ID:HtK2VIhJ
>>55
見苦しい言い訳だね〜
それなら「rangeはlistとは違うから」とでも答えておけばいいだけだろ

必死に調べて__repr__見つけたのかなw
でも間違ってるしreprの実装に言及しないと説明できないと思ってる時点で分かってないから

超初心者にドヤ顔で間違った答えを教えたりRubyキチをバカにする前に公式チュートリアルくらいは読めよな
58デフォルトの名無しさん
垢版 |
2021/03/21(日) 14:33:51.63ID:c1Fm1qtl
>>57
そうだね、ケチ付けてばかりじゃなくて「分かってる」あなたも説明してみてよ
初心者スレだからみんなの為になるよ
2021/03/21(日) 15:01:23.60ID:rOmbGrT+
はいはい。病院でお医者さんにはなしてあげてね
2021/03/21(日) 15:08:07.65ID:ba25SXqE
つまらん煽りは他所でやってくれ
と、俺が言ってみる
2021/03/21(日) 17:19:57.60ID:LD2dmgE2
>>58
print関数は引数のオブジェクトの文字列表現を出力する関数で
range(3)の文字列表現は'0 1 2'じゃなく'range(0, 3)'
なのでprint(range(3))を実行するとrange(0, 3)と表示される

ちなみにlistなら'[0, 1, 2]'みたいな表現になるから'0 1 2'と表示したいなら自分で加工する必要がある
例えばprint(' '.join(str(x) for x in range(3)))
62デフォルトの名無しさん
垢版 |
2021/03/21(日) 17:51:46.12ID:sFWHtMDC
>>> print(*range(3))
0 1 2
2021/03/21(日) 19:05:58.83ID:7CdIp7EP
>>62
優勝!
2021/03/21(日) 19:14:50.12
処理Aが同じで
無限ループしたいときと、任意回数ループしたいときを分けたいんだけど

n = 10 if 条件 else 99999999
i=0
while i < n:
_print('処理A')
_time.sleep(1)
_i += 1

無限ではないにしろこれでいいんだけど
n=99999999がなんかかっこ悪い・・
別の書き方ありませんか
6564
垢版 |
2021/03/21(日) 19:22:48.42
自己解決・・かどうかわからないけど
でいけた
でも
for i in range(float('inf')):
は無理だった・・
2021/03/21(日) 19:30:08.83ID:g0m1T9az
n = 10
a = 1 if 条件 else 0
i = 0
while i < n
_print('処理A')
_time.sleep(1)
_i += a
2021/03/21(日) 19:46:13.27ID:Duyg5pmm
[*iter]
68デフォルトの名無しさん
垢版 |
2021/03/21(日) 20:27:26.58ID:c1Fm1qtl
>>61
その「文字列表現」を決定するのが__repr__では?
__repr__の実装に言及せずとも説明できると言うのは?
単に名前を出さないだけで言及していないことにはなってないな
2021/03/21(日) 20:28:41.92
>>66
変数増えるけどスッキリしてこっちのがいいですね
ありがとうございました
2021/03/21(日) 20:41:49.95ID:Duyg5pmm
numberを継承したoo.__lt__にreturn falseをブチ込む
71デフォルトの名無しさん
垢版 |
2021/03/21(日) 22:32:14.97ID:OQZaxlrU
よろしくお願いいたします。
aList = [[1,2]for j in range(3)]
aList = [[1,2]]*3

2つとも[[1, 2], [1, 2], [1, 2]]の多重リストが作られたのですが、なぜ下の文で多重リストができるのか教えてほしいです。
2021/03/21(日) 22:53:21.54ID:mInw6BRh
>>68
>いきなり__repr__の実装に言及しても訳分からんだろ

__repr__の実装に言及する必要なんてない
__repr__が果たしてる役割を超初心者にも分かる言葉で説明すればいいだけ

それができないと感じるのは自分がその事柄を理解してないから
理解してれば「オブジェクトだから」とか「アロケーションされてないから」みたいな嘘を教えたりしない
2021/03/21(日) 22:56:09.50ID:mInw6BRh
文字列表現がどう決まるのか、どういうついでに言っておくとprint()で使われるのは__repr__じゃなくまず__str__な
__str__が定義されてない場合だけfallbackして__repr__が使われる

公式チュートリアルに書いてるので勉強してね
2021/03/21(日) 23:00:23.62ID:mqfsmAhv
>>71
クラスの操作だからクラスをそういうふうに
作ればそうなる
何故とか本質がどうとかは設計した人の考え
便利だなと思えば使えばいい
75デフォルトの名無しさん
垢版 |
2021/03/21(日) 23:09:36.59ID:OQZaxlrU
>>74
ありがとうございました!
気にせず使っていきます
2021/03/21(日) 23:22:30.25ID:ztnIU7M3
>>71
listやtupleやstrなどのシーケンスと呼ばれる型に対する*演算子は
シーケンスの中身の要素を指定した回数分繰り返した新しいシーケンスを返すように定義されてる
2021/03/22(月) 04:49:29.76ID:FrFq7CFg
>>71
FAQ中のFAQだから余計な世話かもしれんが、見た目が同じでも同じリストでは無いことに気をつけてね

リストの中身は要素への参照だから、それを複製した後者は同じオブジェクトを3回参照してる(cでいえば、同じポインタx3)
見た目が同じオブジェクトを判別するためにid関数が用意されているから試してみて
前者をl1, 後者をl2として
map(id, l1), map(id, l2)
前者のidは全て同じ、後者は新たに作った[1,2]を3つ並べてるので3つとも違うはず

参照の概念をややこしいと思いlistを避けたいと思うのなら、型の同じ要素を入れる場合は常にarrayを使う事を推奨する(標準型の範囲では)
具体的な値の配列なので、型チェックも入り、効率もよい
2021/03/22(月) 05:17:24.56ID:FrFq7CFg
i for rangeイディオムは不要な添字iが気持ち悪いよな…
ロジック通りに、ビルトイン関数のみでミニマルにやるには
memoryview([1, 2]).cast('b', shape=(3, 2)).tolist()
[[1, 2]
[1, 2]
[1, 2]]
でいいだろう
tolistはリスト表示するためなのでお好みで
数字が小さいからbyte配列にしたけど、普段使いならlongにしといた方が気楽かも
2021/03/22(月) 05:25:09.41ID:FrFq7CFg
byteって言ってるのにbyte抜けてたごめん
memoryview(bytes([1, 2])).cast('b', shape=(3, 2)).tolist()
[[1, 2]
[1, 2]
[1, 2]]
です、試してないけど多分動くだろ
実用にはbytesはarray('l', seq)へ差し替えてね
2021/03/22(月) 12:40:31.58ID:uAAKNqiZ
while True:
_a = 1
_break
print(a)

インデント下がって定義した変数をwhileの外でも使うのは普通なのでしょうか
スコープの判断で可読性が落ちるかなと個人的に思ったのですが慣れですかね
2021/03/22(月) 12:53:03.86ID:bzTgC/HJ
>>80
それしきの深さならえんでねーの

それにしてもパイセンいわく
while True:で安易に無限ループ作るのはイクナイ(・A・)らしいが
2021/03/22(月) 14:08:43.53ID:Rzf9eLtl
>>80
python的には普通らしい
ただ見通しが悪くなる場合が多いのと
勘違いによる不具合を起こさないために自分は極力避けてる
2021/03/22(月) 15:33:16.54ID:uAAKNqiZ
>>81,82
なるほど
とりあえずは現状維持にしときます ありやした
2021/03/22(月) 21:09:47.56ID:cezDTGq+
>>81
Cなら for(;;) とか出来たけど
itertools.count() とかダサいねん。
2021/03/22(月) 21:32:57.72ID:H+rnlZW/
whileTrueって使ったらあかんの?
2021/03/22(月) 21:38:05.40ID:bzTgC/HJ
良くはない、らしい
有能なパイセン談
2021/03/22(月) 21:45:46.85ID:OQmrOVJK
while str:
2021/03/22(月) 21:52:49.95ID:10Qa0fDO
するな
コールバックがあるから
2021/03/22(月) 23:07:52.41ID:g8se3Ggw
Python公式リポジトリ検索してみたらほんと腐るほど見つかって嫌になった。
全部挙げきれないので一例:
https://github.com/python/cpython/blob/63298930fb531ba2bb4f23bc3b915dbf1e17e9e1/Tools/ccbench/ccbench.py#L163
https://github.com/python/cpython/blob/63298930fb531ba2bb4f23bc3b915dbf1e17e9e1/Lib/test/test_shlex.py#L265
https://github.com/python/cpython/blob/63298930fb531ba2bb4f23bc3b915dbf1e17e9e1/Lib/concurrent/futures/thread.py#L74
https://github.com/python/cpython/blob/63298930fb531ba2bb4f23bc3b915dbf1e17e9e1/Lib/concurrent/futures/thread.py#L202

それならまだしもwhile 1:とかもある↓
https://github.com/python/cpython/blob/63298930fb531ba2bb4f23bc3b915dbf1e17e9e1/Lib/idlelib/hyperparser.py#L240
2021/03/22(月) 23:19:25.97ID:xEZrbDTS
>>85
無限ループ自体が処理によってはCPU負荷が上がったりするし
break条件をミスってると不具合があった時にループから抜けずに変な所でエラーになる可能性も出てくる
だから最初から有限回ループして確実に止まるループ設計の方が安全だよね、っていう考えはある
(まあwhile True breakの方が書きやすい場面も多いけどね)
2021/03/23(火) 00:43:05.32ID:ch/yi3Wo
無限ループは無限ループが必要だから使うのであって、
有限のイテレータのループで書き換えられるときには当然使わないのでは?
有限と無限を同列に並べて比較すること自体がなんか違和感あるけど。
2021/03/23(火) 00:48:20.02ID:BKCKGFNi
while自体の処理が重いから使うなってならわかるけどミスったら困るから使うなって、理由になってなくない
使いどころも無視してとにかく使うなって、先人の下手なトラウマが一人歩きしてるだけじゃねーの
2021/03/23(火) 02:55:45.64ID:71b8io/J
まあループの有限性が事前にわかるようならそれを表現するためにwhile 1: 使うのは適切じゃないって話だろ。
実際ループ変数ぽいの使ってなぜか while 1使ってるコードは新人にはよくある。
2021/03/23(火) 02:59:15.82ID:QbxOC6mC
>>81
ポンコツかよ
他に無条件ループ作るコンストラクトがあるなら教えてほしいわ
上の方のレスにある9999999決め打ちでもするのか?
他にもハック挙がってるけどどう考えてもwhile True:より筋が悪いよね?
先輩が言ってたから正しい?自分の意見を持とうよ?
2021/03/23(火) 03:26:27.50ID:ND3VvCO4
while yes=sir:
2021/03/23(火) 03:33:34.75ID:QbxOC6mC
…と偉そうなこと言った手前、俺の習慣を紹介しておく
while True や1は仕様上そうするのが筋なので、確かに冗長と批判できる
truthyならwhile "comment":でも、while ...:でもよい
何の情報も含まないwhile True/1:よりは良い習慣
後者は…それが思いつかなかった時だな、コメントがbreakの傍に付いている方が合理的なケースもあるので

....は1, 2, 3, ...という一般に認知されている表記なので、trueを表現するtruthy(5シンボルとしては、1/Trueより優れている事は明らかだろう
97デフォルトの名無しさん
垢版 |
2021/03/23(火) 03:49:20.93ID:zpYNNqZr
>>64
if not cond:
__while True:
____print('処理A')
____time.sleep(1)
for i in range(10):
__print('処理A')
__time.sleep(1)

この部分だけ書けていわれたらこうするわ
2021/03/23(火) 06:54:35.77ID:ZYJLDniu
>>97
無限ループいつ抜けるの?

それと条件によって無限ループか有限ループかという2つの処理分岐が並列に書かれてないから意図が伝わりにくいよ
2021/03/23(火) 06:55:42.42ID:ZYJLDniu
>>96
ちょっと何言ってるかわからない
100デフォルトの名無しさん
垢版 |
2021/03/23(火) 10:05:15.95ID:HSGkWRhe
GOTO文のように無限ループ文を作れば解決する
2021/03/23(火) 14:54:00.54ID:CY92qFOb
while Trueするのはdo~whileしたい場合
そうじゃないなら書き直したほうがいいかもね
2021/03/23(火) 15:46:37.69ID:mu30Ep9P
ちょっとしたデバッグのときに
lst = [
__{"a":0,"b":1}
__'''
__,{
___"a":2,
___"b":3
__}
__'''
]
シンタックスエラー
'''は#の複数版かと思ったら単なる文字列だったんですね。
こういうときは、ショートカットキーで複数行に#入れたり消したりする人の方が多いのかな
2021/03/23(火) 16:21:30.22ID:ch/yi3Wo
>>102
さすがにコメントアウトショートカットで出来ないエディタを使うことはないな。
絶対に何も入れちゃいけない環境以外ではVSCodeいれちゃう。

何も入れちゃいけない環境でデバッグしなくちゃいけなくて、
lstに入れるだけいいんだったら、複数バージョンの代入文を作っておいて、if Trueとかでどれを実際に実行するかは決める、ぐらいはやるかなあ。
あとはなるべく改行を入れないで#一つでコメントアウトできるようにするって手も考えるかな。
2021/03/23(火) 17:12:08.45ID:q1xbaFi+
Octaveだと正方行列とその逆行列の乗法で単位行列が得られる。
GNU Octave, version 4.4.1
octave:1> a = ([4,5,7;-4,1,5;-10,3,8])
octave:2> b = inv(a)
octave:3> a * b
ans =
1.00000 0.00000 0.00000
0.00000 1.00000 0.00000
0.00000 0.00000 1.00000

でもPython3だと単位行列が得られたのかよく分からない。
これで正しいの?

Python 3.7.3
>>> import numpy as np
>>> a = np.array([[4,6,7],[-4,1,5],[-10,3,8]])
>>> np.linalg.inv(a)
array([[ 0.04666667, 0.18 , -0.15333333],
[ 0.12 , -0.68 , 0.32 ],
[ 0.01333333, 0.48 , -0.18666667]])
>>> b = np.linalg.inv(a)
>>> a @ b
array([[ 1.00000000e+00, -4.44089210e-16, 0.00000000e+00],
[ 2.77555756e-17, 1.00000000e+00, 0.00000000e+00],
[ 1.38777878e-17, 0.00000000e+00, 1.00000000e+00]])
105デフォルトの名無しさん
垢版 |
2021/03/23(火) 17:43:46.60ID:SeSscUQI
>>101
どうして?
106デフォルトの名無しさん
垢版 |
2021/03/23(火) 18:30:46.10ID:f4Z9PwYH
>>104
計算誤差でしょ
非対角成分は0にかなり近い
2021/03/23(火) 18:47:26.71ID:WuxMgk/9
行列が違うのはおいといてOctaveもnumpyも基本は浮動小数点数の演算だから丸め誤差などによりピッタリゼロになるとは限らない

Octaveで
format long e
を実行した後に確認すると多分ゼロになってないと思うよ

表示形式でゼロに見えてるだけだと思う

うちの環境だと0.00000じゃなくて-0.00000になる成分あるし
108デフォルトの名無しさん
垢版 |
2021/03/24(水) 19:57:42.51ID:8oiSJv/j
例えば、Pythonを用いたプログラミングの本を読んでいるとします。
その本の著者のサイトにPythonコードが「.pyファイル」としてダウンロードできるようになっているとします。

ある読者は、普段からIDEではなく、Jupyter Notebookを愛用しているとします。

そのため、この読者は、Jupyter Notebookのセルに著者の「.pyファイル」をロードして、コードを読んだり、変更したり、実行したりしたいと考えています。

この読者はどうすればこれを実現できるのでしょうか?
2021/03/24(水) 20:00:25.38ID:jO3PWgho
この読者って自分のこと?
2021/03/24(水) 20:04:40.15ID:QbxZqHqJ
>>108
IDE使おうが同じことすると思うのだけど
なぞなぞに思える
jupyter notebookは知らないがセルじゃなくてシェルなのだろうな
2021/03/24(水) 20:19:50.51ID:8oiSJv/j
>>109-110
ありがとうございます。

>>109
自分のことです。

%load sample.py

とセルに入力すればいいようです。
112デフォルトの名無しさん
垢版 |
2021/03/24(水) 20:23:27.54ID:8oiSJv/j
JupyterLab上でグラフを表示するには、

%matplotlib inline

というコマンドをセルに入力して実行しないといけないということで、実際今までそうしてきました。

今日、このコマンドを入れずに、

# %load matplotlibexample.py
import matplotlib.pyplot as plt
import numpy as np
t = np.linspace(-3, 3, 1000)
plt.plot(t, np.exp(-t**2)*np.sin(20*t))
plt.title('sample graph $x(t)=e^{-t^2}\sin(20t)$')
plt.xlabel('t')
plt.ylabel('x')
plt.show()


を実行したところ、ちゃんとノートブック上にグラフが表示されました。

%matplotlib inline

はもう入力しなくてもよくなったのでしょうか?
2021/03/24(水) 20:48:55.22ID:SWND22zP
>>110
横からだけどセル。
notebook用語なのでpython以外のカーネルにしてもセル。
実行単位なんだけどあるセルで算出してる結果に依存してる別のセルを実行する際に依存先のセル未実行だとエラーとかいろいろめんどい。

一世を風靡したスライド
I Don't Like Notebooks
https://docs.google.com/presentation/d/1n2RlMdmv1p25Xy5thJUhkKGvjtV-dkAIsUXP-AL4ffI/mobilepresent?slide=id.g362da58057_0_1
2018年のjupyterconでの発表でした
https://conferences.oreilly.com/jupyter/jup-ny/public/schedule/detail/68282.html
当時の反応(英語)
https://www.reddit.com/r/Python/comments/9aoi35/i_dont_like_notebooks_joel_grus_jupytercon_2018/
2021/03/25(木) 01:57:39.05ID:5Yw77v05
もしかして.pyファイルをjupyter notebookで実行する方法聞いてるだけか
何でそんな長々と意味不明なこと書いてるの?
2021/03/25(木) 02:19:54.21ID:Lv/3T6MK
回りくどくて草
2021/03/25(木) 04:13:00.19ID:TW8zAfP8
統失の特徴
2021/03/25(木) 08:02:26.68ID:np4EPf1w
コピペで大体実行できるかな

別にサクラエディタでもVSCodeでもいいから.pyファイルを開きコピペ
ただしsjisとUTF-8とか
あとインデントに気を付ける
コピペでインデントがずれて動かないことがあるので
そこは丹念に直す
2021/03/25(木) 08:21:24.72ID:ITDRmOAn
tkinterで
200*100じゃなくて
200x100と小文字のエックスするの何故なのか教えてほしいです……
2021/03/25(木) 08:39:22.55ID:3ixfSSYA
乗算じゃなくて
ピクセルで領域指定だからジャネーノ
とエスパーしてみる
120デフォルトの名無しさん
垢版 |
2021/03/25(木) 14:26:26.89ID:B8lnjfbN
以下のコードを実行すると、グラフがf(x) = 0のグラフになってしまい、意図したものと異なってしまいます。
どう修正すれば意図通りの結果が得られますでしょうか?
ベクトル化についてよく分かっていないので、そのあたりがあやしいと思っています。

import numpy as np
import matplotlib.pyplot as plt

PI = np.pi

def func_x(t):
if 0 <= t:
return np.sin(t)
else:
return 0

npfunc_x = np.vectorize(func_x)

t = np.linspace(-PI, PI, 10000)
x = npfunc_x(t)

plt.plot(t, x)
plt.show()
2021/03/25(木) 14:28:00.54ID:Nsykn7+b
>>120
そう言う時はxの値を見てみましょう
やり方は「python デバッグ」でググったら出てきます
2021/03/25(木) 14:33:03.93ID:B8lnjfbN
>>121
xは全部0の配列になっています。
2021/03/25(木) 14:37:18.67ID:3ixfSSYA
0ベクトルにナニかけても0やぞ
算数やりなおせ
2021/03/25(木) 14:53:03.27ID:B8lnjfbN
>>123
意味が分かりません。

xは関数の戻り値です。
xに0などかけていません。
2021/03/25(木) 14:57:17.24ID:8wVz7C90
出力は一番目の値で決定されるから、return 0.0とするかotypeを指定しろ

不等号逆向きにすると動作するけど、そのコードが動作しないのは出力が整数型に固定されて切り捨てでゼロ扱いされるから
126デフォルトの名無しさん
垢版 |
2021/03/25(木) 15:03:02.76ID:B8lnjfbN
>>125
return 0.0
に変更したら、動作しました。
ありがとうございました。
2021/03/25(木) 15:26:22.39ID:vHK7Evso
今まではプログラミングの経験はなく、
教養としてpythonを勉強し始めました。
ただ仕事で使う機会もなく、いまいち勉強に身が入らない感じです。

皆さんはどうされているんですか?
ここのスレだと仕事で使う人が多いんでしょうか。
2021/03/25(木) 15:39:56.92ID:3ixfSSYA
>>127
完全に趣味
だがしかし
使いこなせれば仕事でも楽ができる
2021/03/25(木) 15:43:34.06ID:3ixfSSYA
>>124
インデントが崩壊していたからてきとーに見てた
正直すまんかった

>>125横じゃが
>return0.0
こんな手があるんだ!


小数まで計算するとコンピュータがついてけないからって
都度都度四捨五入処理をするよう組まれてた
ン十年前のプログラムを
Pythonで書き直すときにハマったのをおもいだした
2021/03/25(木) 16:49:02.78ID:Q40pz2EP
>>127
ブラゲーのbot運用
その次がエロサイトのスクレイピングと自動分類
たまに業務データの解析で使うときもある
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況