Pythonのお勉強 Part72
レス数が950を超えています。1000を超えると書き込みができなくなります。
たくさんのファイルを3ステップで加工したい
一つずつやると時間かかるので、並列処理させる
全ファイルをステップ1処理 -> 全ファイルをステップ2処理、という感じ
それでかなりスピードアップはするけど、
ステップの継ぎ目部分で全体の完了を待つのが無駄
全体は待たずにファイル毎にどんどん先に進む並列処理を
簡単に書くモジュールある? >>748
処理がファイル間で独立しているならmultiprocessingモジュール
Unix環境ならxargsコマンドで足りる話にみえるけど concurrent.futuresモジュールのが書きやすいかもしれん
どっちも見てみて あんまりいいサンプルが見つからない
キモは、プロセスの実行に条件があるという点
file1-step1が完了してないとfile1-step2は実行できない
必要なプロセスを全部登録して実行させるとそんなことは考慮されないので、
どのプロセスが実行可能か依存関係を教えてやらないといけない モジュール使う分には単純だから公式ドキュメント読んで
https://docs.python.org/ja/3/library/multiprocessing.html
https://docs.python.org/ja/3/library/concurrent.futures.html
それでファイル単位に並列にして
ファイルを引数にstep1/step2を関数化したら後は呼ぶだけよ
あるいは外部コマンド化して
cat paths | xargs -IZ -P $(nproc) sh -c 'step1.py Z; step2.py Z' step1とstep2でプロセスを分けずに全体を1つのプロセスにするということかな
実際にはそれぞれで別のexeファイルを実行するのでなかなか難しい for file in files:
step1.exe file
for file in files:
step2.exe file
という形じゃなく
step1.exe files
step2.exe files
という形で実行してるなら各exeがファイル毎に進捗報告やコールバックしてくれないと
ファイル単位で処理を先に進めるのは無理
前者でやってるならやりようがあるけど
ファイル単位じゃなくステップ単位にまとめるとスピードアップしたということなので
その原因を先に確認した上でやり方考えたほうがいい
性能向上のための並行/並列化は
具体的な処理内容やワークロードの特性によってアプローチが変わる
one size fits allなやり方は存在しない 何を言ってんだこいつは
プログラミング言語の前に国語をやり直せ
そうだな>>748を100万回読み直して相手に何が伝わってると思うか感想を述べよ >>752
>'step1.py Z; step2.py Z'
これは'step1-3.py Z’でよくない?
キャッシュされてもインタプリタ起動のオーバーヘッドはそれなりにかかるので >>755
なるほど
実際にはまだ何も並行化/並列化できてないという話なのか
>実際にはそれぞれで別のexeファイルを実行するのでなかなか難しい
だったら↑この思い込みを捨てることから始めたほうがいいよ
結局のところPythonで並行/並列化するなら以下の4択なので
具体的な処理内容とワークロードの特性を加味して適切なものを選んでね
1.非同期
2.マルチスレッド
3.マルチプロセス
4.非同期+マルチプロセス 結局、
proc1.exeをsubprocess.Popen()で並列処理
proc2.exeをsubprocess.Popen()で並列処理
proc3.exeをsubprocess.Popen()で並列処理
となっていたものを、
proc1.exe
proc2.exe
proc3.exe
を実行するbatファイルに移動させて、
batファイルをsubprocess.Popen()で並列処理で目的は達成できた
batファイルかー、という気もするけど、並列処理で依存関係を気にした例は見つからなかった
(並行処理なら普通) バッチファイルのことをbatファイルと書いているのは初めて見た マジか
"バッチファイル" 473,000
"batファイル" 134,000
だから少数派ではあるけど、22%くらいの勢力はあるのに
そもそも、batファイルを使った経験自体が少ないのでは >>758
テキストファイルの操作みたいだけど、そういうのは処理範囲を指定して同時に動かすんだよ。 >>760
batファイルという書き言葉は最近、発生しているようだけど、一般書籍でもマイクロソフトでもbatファイルとは呼んでいない。
日本語ではバッチファイル、英語ではbatch file。
バッチファイルを使ったことがないというのは、シェルスクリプトを使ったことがないというのと同じで、Pythonコードも動かいたことがないと思われてしまうレベル。 >>762
ステップは行という意味に思われるからやめた方がいい >>762
複数のファイルと書いてあったな。
並列化には担当するファイルを分けるなどいくらでも方法はある。
マルチプロセスの日本語訳が並列処理、マルチスレッドの日本語訳が並行処理だが、英語ではマルチという言葉で同時実行という言葉ではない。
同時実行という意味を付加しているのは日本語。 EXEファイルを二重起動とかPythonもバッチファイルも関係ねえな
実行ファイルを引数なしで実行するとか、シリアル前提処理を多重起動して、想定どおりにならないとか狂っんなw ID:poYagYhe0 は自作自演のネタ野郎だった >>763
batファイルでも別に普通じゃない?
拡張子batのファイルには違いないんだし
txtファイル、jpgファイル、mpgファイルと同じだよ テキストファイルの拡張子をtxtとしているのはWindowsの世界だけ
Windowsを使っていてバッチファイルを知らないなんて素人だろ >>770
拡張子は拡張子でしかない
JPEGのファイルの拡張子はjpegが本来の拡張子で、jpgはWindows、MS-DOSの拡張子は3文字までという仕様で発生したもの。
さらにWindowsのデフォルト設定だと拡張子を表示しないんだぜ?
何をどう勘違いしているのかな。 拡張子がhtmlだとhtmlファイル、拡張子がhtmだとhtmファイルだと呼ぶなら、単に無知をごまかしているだけ バッチファイルはマイクロソフトの命名のセンスが悪かっただけだが、バッチファイルと作っている会社が言っている名称を使うのが素直
拡張子が3文字だと思っている疑惑があるのと、UNIX、Linuxの世界では拡張子はあくまで目印にすぎない
ファイルが何のファイルかは少し読み込んで判断する
WindowsでUTF-8のテキストファイルを扱う場合は、テキストファイルにBOMという情報を先頭に書く
シェルスクリプトも1行目に自分自身の種類と何で実行するのかを書く どうでもいいことで盛り上がってんなww
batファイルってのは同じバッチファイルでも.cmdじゃなく.batだぞってこと
htmファイルも同じ
まあ個人的には.batファイルのようにドット付きでなら書くけどドット無しでは書かないな >>758
proc1.exeをsubprocess.run()
proc2.exeをsubprocess.run()
proc3.exeをsubprocess.run()
↑この一連を関数にまとめればbatファイルはいらない
それとまとめた関数は直接Popenじゃなくmultiprocessing経由で処理すれば
Poolを使う分だけオーバーヘッドが減る
あと処理内容次第だけどasyncio使って全部非同期ににしたほうが
コードは多少面倒でもリソースが減って速度も出る可能性もある Pool版も問題なく動いた
if __name__ == '__main__':
が要るのね 子供がエラー出てもなんも判らんのな
get() すると判るけど、マルチプロセスにならないので、デバッグ終わったら外す
グローバル変数経由で参照させようとしても見えないとか罠がいろいろ apply_async(func, args=(arg,))
の余計なコンマもなんじゃこれと思ったら、無いと動かないんだよな
そんなもんバグやがな グローバル変数が参照できるかどうかは処理系依存な気がするんだよな
Copy-On-Writeでプロセス増やしてたら普通に参照できる筈
そんな互換性の無いコードが書けていいのかとは思うけど さすがにこのレベルの基礎を押さえていない人は
自称Python初心者でなくても↓こちらのスレへどうぞ
>●関連スレ● 自称初心者は↓へ
>【まず1嫁】くだすれPython(超初心者用) その59
>https://mevius.5ch.net/test/read.cgi/tech/1689241721/ 要素1個のタプル 1,
要素0個のタプル ()
なんでやねん
コンマこそがタプルを表しているなら、コンマだけが空タプルの本質だろうに
冗長に書いて(,) でもエラーになる
コンマがタプルで括弧はおまけだけど空の時だけ例外ルール >>790
あのさ(1)だとタプルじゃなくてただ数値がカッコで括られてるだけと判別出来ないだろ >>792
要素数が変化しない空のシーケンスを表現するためにある
fが引数1個を取る関数、gが引数を取らない関数だとしたら
apply(f, (1,))とapply(g, ())
のようにempty tupleを使うのが理にかなってる SQLで書いてるクエリをSQLAlchemyでORMにしたいのに
全然出来んわ、半分諦めかけてる
なんかコツとかないんか? word1かword2かword3のいずれかがstrに含まれているかどうか
はどうやったらすっきり書けるだろう
内包表記なら書けるけど、
if (word1, word2, word3) in str
くらいの判りやすさが欲しい すぐに思いつかないようなゴルフが仮にできるとしても
関数化した方がわかりやすいとおもう any(w in str for w in words)で不満か? >>798
>>796 さんは「すっきり」と仰っていますが。
# 敢えて反語法で表現しました。 >>800
(word1 in str) or (word2 in str) or (word3 in str)
を、すっきり書きたいのですと。 list in str
を許容するように文法を変える
結果のリストが得られるので、
any(list in str)
みたいに使う >>796
ここで言うstrって変数じゃなくて型か? any([isinstance(x, str) for x in (word1, word2, word3)])
any(map(isinstance, (word1, word2, word3), [str]*3)) 関数一つかますしか無いだろうな
def find_words(list, str):
return [w in str for w in list]
print(any(find_words(['a', 'b'], 'bcde'))) 、pythonでWEBスクレイピングをしてるのですが、タスクスケジューラで動かすと画面が欠けます。
ログイン中だと問題なくでます。
なぜかサイズ指定しても効かないのですが、タスクスケジューラで登録して自動実行させてる方いませんでしょか? >>810
「ユーザーがログオンしているかどうかに関わらず実行する」が選択された場合、
タスクはセッション0のデスクトップが無い環境で実行される(Vista以降)
通常のブラウザでイスクレイピングをしたければ適当なアカウントにログインしていなければならない
またはヘッドレスモードのあるブラウザなら動きそうではあるがどうだったかな >>811
ありがとうございます。
ヘットレスモード試してみます。
まずはログインした状態でタスクスケジューラ起動とかが一番近道かもですね! >>796
s = set(str.split())
if {word1, word2, word3} & s != {}:
... >>796
ごめん間違えた
s = set(str.split())
if {word1, word2, word3} & s != set():
... 配列のインデックスが1じゃなく0から始まる利点て? 0の方がいろいろ合理的だけど、
printf(f'{count+1}')
とかやるよな
範囲を示す時に始点と終点よりも、始点と終点+1(次の要素の始点)の方が
便利なケースが圧倒的に多いけど、なんか怖いので愚直にやる >>813-814
スマソ、なんか Trueにならなくね?
>>> word1 = 'abc'
>>> word2 = 'def'
>>> word3 = 'ghi'
>>> sstr = 'aaabcddd'
>>> s = set(sstr.split())
>>> {word1, word2, word3} & s != set()
False
>>> s = set('zzzzzzz'.split())
>>> {word1, word2, word3} & s != set()
False
>>> >>815
Pythonって配列無いんじゃ?リストやろ
C言語系とかの配列的に添字が0から始まるのはメモリアドレスを計算する時に高速な為 1. {'sss'}.issubset({'s', 'ss', 'sst'})
2.
strings = ('miss')
ret = any([s for s in ('s', 'ss', 'ss') if s in strings])
3. filter(lambda s=s: s in strings, strings)
4.
strings = ('ss', )
is_in = strings in ('s', 'ss', 'sss') ヒント
画像情報 テレポート
エネルギー 瞬間にどう
観測結果論部あり
※情報とエネルギーを送れるのなら任意の波と線とHzを任意の場所で発生可能
上記の技術に脳内インプラントデータを対象者全身に送信で操り人形
地球外宇宙人もサイコパスが使用中
高度な科学を使用できていても自然環境も人間社会いも狡猾な者【人間を物として見る者】が圧勝
ガスライティング.ギャングストーカー.電磁波攻撃 等
現在の若者サイコパスで無い者は何%いるのかな?
地球派【マイクロ波聴覚効果】は違法でないので宇宙人が行っていても合法
別の惑星はテロに該当なので問答無用で戦争
マイクロ波は波の種類なので
X線でマイクロ波を起こしているので
お前に200回のx線を打ち込んだも理解できるでしょう
※5Gはミリ波で動的動作も追跡可能になるのでマイクロ波より便利
テラヘルツ波はミリ波と比べて現在不明なので研究中
何Hzの帯域は対象者周囲の状況に応じて変化していると思われるので
線種類 + 波種類 + 何hz + 使用w数 = 音波【音の高さ】? requests.get() したものに対して、
<meta charset= の内容を見てencodingを設定してくれる機能ってある? >>817
その条件では使えない
英文みたいに空白で単語が区切られている時に使える
部分一致はsuffix arrayみたいな重く複雑なsetが必要
ひょっとしたら何かエレガントな書き方があるのかもしれないが >>822
まずdecodeしないでmeta見れるの? apparent_encoding にするといいよという記事をよく見るけど、
encodingに困ってる時にapparent_encoding使うと悪化する
困ってない時は何もしなくていい
結局使い所が無い >>818
高級言語なのにそこにつっこむセンス
速度に影響するから知っておいても損はないけども
むしろ内部実装でいうとlistは配列ちがう? >>826
エンコーディングの推論って日本語だとうまく機能しないよな
結局決め打ちして試すしかない 決め打ちしなくても、meta読めばそれが正解なんだよな
答えが書いてあるのに推測しようとして失敗する charsetに嘘書いてある事もあるから
metaは参考程度 >>827
なんで配列がリストと同様だと思ったん? 「動的配列は配列じゃないリストだ」と言い張る人なんじゃね?
それか何か根本的な勘違いをしてるか
まあどうでもいいけど その辺の言葉の使い方は言語や人や実装によって違うからまずは定義をちゃんとして欲しいな 言語も何も指定せずにプログラム関連でリストというと、リスト構造を指すよな 基本情報も持ってないような奴はその辺のデータ構造としての配列とかリスト分かってないんだろ 大抵はリンクリストを指すのだろうけど動的言語あたりが好き勝手用語を解釈し始めて
動的配列を指すこともあるし一般的にモノが並んでいることをリストと言ったりもする
ややこしい時代になったもんだ データ構造に言及しない文脈なら一般的に一覧とかリストで済ますでしょ
PythonスレはVBAスレに並ぶ初心者が集うスレだからこんな議論が度々起きても仕方ない ごくごく一般的な言葉を環境特有の用語として使う馬鹿が悪い 数学なんかそんなんばっかり
わざとだろと思うくらい 俺の投稿GW以降初なんだが馬鹿の自演言い訳扱いにされてんの? >>833
配列そのものが連続したアドレスのメモリ領域のことだからな
動的にメモリを確保する場合は、型が後づけになるから配列と呼ぶの違和感があるのは仕方ない サイズ決めてからリスト作ったら
内部データは1つの配列?
それとも1つ1つ個別のリンクリスト? >>843
>配列そのものが連続したアドレスのメモリ領域のことだからな
何を主張したいのかよくわからん
Pythonのlistは配列じゃないと言いたいの? それとも配列だと言いたいの?
>動的にメモリを確保する場合は、型が後づけになるから配列と呼ぶの違和感があるのは仕方ない
動的にメモリを確保することと型が後付になるかどうかは関係ないよ メモリなんかいつでも好きな時に確保できるように見えるだけで、
実際はmallocで頑張って実現してるしな
思想は先進化していくのに実現手段はずっとCなので、
職人がどんどんハゲる 結局 >>839 だよな。お前の言う「配列」はどれなんだってな。 「環境特有の用語」として使ってるやつなんていないだろ 発端はこれ
>Pythonって配列無いんじゃ?リストやろ
書き方から配列ではない”リスト”、リストではない”配列”について述べてることは自明
つまり抽象データ構造としてのリストを指してるわけではなく、その具体的実装のうち配列ではないもの(リンクリスト等)を指しているか、Pythonのlist(リスト型)を指していることになる
次にこれ
>なんで配列がリストと同様だと思ったん?
これはlistの内部実装が配列だというレスへの返信内容なので、発端となったレスと合わせるとlistがリンクリスト的なもので実装されてると勘違いしてたということ
同じ勘違いをしてると思われ、かつ同じように二言目にはCに言及してるレスが散見されるのは偶然ではないでしょう トートロジーなんだよな
中身のアドレスが規則的に並んでいるものを配列と呼ぶ
と定義すれば、配列はアドレスが規則的に並んでいる
自分の定義に疑問を持つような文章を書くから、
知らんがなお前の脳内にしか答えはねえよになる python変化目まぐるしくて追いつくのがしんどすぎる....
最先端のpythonライブラリのポータルサイトとかないの?
毎日確認したいわ
本でkeras、tensorflowとか必死で習得(完璧ではない)したのに
今はpytorchも主流らしいね
こんなの追いつくの大変だわ
webとpythonは本当に頭がスポンジじゃないと無理だわ >>852
https://pypi.org/
だいたいのライブラリはGitHubでプロジェクトつくってるから
バグやリリース前の情報を追いたいならissuesをみる >>852
pytorchも生で使う人はいないぞ
transformersというpytorchを使いやすくしたライブラリしか使われてない
まあそれも計算資源がある会社や組織しか無理だけど
日本向けにCPUでうまく学習できるライブラリ作れよって思うけどね
スパコンはあるわけだし
もう作れる技術ある人がいないのだろう
悲しいなあ >>853
見方がわからんw
>>854
人工知能のアルゴリズム組めるってそこそこ優秀で大学院レベルだと
思うんだよね
javaとかだとベテランが大量にいるだろうけど
それってjavaの取り巻く環境と文法についてのベテランであって
pythonのベテランっていうともろに数理科学に精通した人達だから
地頭レベルでいい人なんだろうな
もしかして独学は途方もない挑戦なのかも >>855
昔はライブラリなんてなかったし
どんな分野でも大企業の人間とか研究室の教授とかが作ってたんだよなあ >>851
>トートロジーなんだよな
>中身のアドレスが規則的に並んでいるものを配列と呼ぶ
>と定義すれば、配列はアドレスが規則的に並んでいる
またまた>>843と同じで何を主張したいかわからん文章だけど
結局Pythonのlistは俺の定義する配列ではないということ? AIはいい方法が見つかって、あとは規模を拡大していくだけじゃないの
その先に強いAIもあるよ 循環定義と言いたかったんじゃね?
循環してないから的外れだけど >>860
循環してないならトートロジーで合ってるのでは >>861
もちろん合ってない
哲学板ででも聞いてくれば?
そんな板があるのか知らんけど >>855
PHP の本を書いている、たにぐちまこともPython の動画を出そうとしたけど、
大学で勉強しないと無理と言っていた
KENTA が既に言っている。
理系で、8年も掛けて勉強するのは効率が悪い。
何年も勉強する看護師とかもそう
文系のアホが唯一金持ちになれる、最強のチート職業はRuby on Rails である!
Runteq の菊本も、千時間と言っている。
外人も言っている
Railsでは頭の良さが必要ではなく、再現性が高い。
東大受験と同じ。
アホでも3千時間の暗記で、偏差値が40上がる。
75時間で1偏差値上がる
だから、ほとんどの学校・サロンではRailsを教える。
知識が勉強時間に比例するから。
東大向け予備校と同じ
一方、Pythonは大学院数学科とか、地頭の良さが問われる。
文法を知っていても雇われない。
全言語の中で唯一、人余りの言語だし
文系なら絶対に無理。
理系で偏差値70以上なら独学でもできるだろうけど
Java は建設業と同じ、5大SIer の多重請負構造の身分制度があるから、
間に1社入る毎に、3割抜かれる。
絶対に大企業系列での身分が変わらないから、
一発逆転を狙うdrop out 組は、Railsへ進む 東大数学も難なく解けるような人間だとpython+人工知能も余裕なんだろうな
高卒にプログラマかなり多いけど彼らは人工知能理解できるのだろうか?
確率過程、解析学、線形代数など大学数学レベルの応用なわけだが 建築現場の労働者が強度計算できるのか心配してるようなもの 独学で学習したが動かせるようになるまで2.5年かかった
理解できているかは、分野や扱い方次第でどうとでも言えるかと
人工知能という単語が広すぎるので
何の何でどのモデルをどの手法でどうやってトレーニングして、何をできるようにしたことがあって、何に適用したことがあるか?
位まで説明してくれないとわからない マクドに行ってハンバーガーくださいと言っているのと変わらないということ >>846
動的に確保したメモリ領域を1バイト単位の変数からおかしくないが、可変のマルチバイトの型にすると物理アドレスで追えなくなる。 Pythonは一般的にコレクションにあたるものが独特の定義と変な構文・命令文で操作するから、素直な配列をリストと言う名称にして、配列とも呼ぶということにしたせいでわかりにくくなった。
配列は連続したメモリ領域という意味合いがあるが、Pythonは完全に無視しているので、初心者にはハードルが高い。 変にかじってるから連結リストを連想するんでは
シンプルに一覧、複数の要素を含むデータ構造ってだけ >>871,872
配列の領域を動的に拡張する動的配列の話と
ヒープというか1つの配列で複数の型の値を管理する話がごちゃ混ぜになってたのね
動的配列であるPythonのlistも連続したメモリ領域(内部はCのarray)
先頭アドレス+インデックスでインデックス番目の要素にO(1)でアクセス可能
連続メモリ領域である配列に型の異なる要素を入れられるのは
PyObjectというオブジェクトへのポインタを格納してる配列だから
intやfloatを格納してもポインタの間接参照が必ず入るので
それを必要としないarray.arrayやndarrayに比べるとシーケンシャルスキャンなどは遅い なんでappendした時のアドレスは最初から空いてるんだ? 動的配列(dynamic array)とか可変長配列(variable length array)でググってください >>874
それは実装の瑣末な問題
ポインタに整数を埋め込んでいるrubyやv8などもある >>866
Stack Overflow 米国年収。2022 -> 2023。
Rubyは、Go/Rust/Elixir の3大言語を超えた!
Ruby : 9.3 -> 9.9 万ドル
Elixir : 9.3 -> 9.6
Go : 8.9 -> 9.3
Rust : 8.7 -> 8.7
多くの言語 : 6.5〜7 -> 7.3〜7.8
PHP : 5 -> 5.9
Dart : 4.4 -> 5.6
プログラマーは、大卒コンピューターサイエンスが必須。
ただし、PHP, Dart だけは高卒用言語だから低収入。
だから、高卒で人工知能などをやっている香具師はいないはず
TIOBE Index 2024/4 では、
PHPは、9位 → 17。
一方、Ruby は、18 → 13
2019年「滅びゆく5つのプログラミング言語」として、
Ruby, Haskell, Objective-C, R, Perl の記事が出たけど、
実はRubyよりも、PHPの方が先に滅んでしまった
KENTA も、PHPをオワコン認定した。
そして初心者のキャリアパスは、Rails → Go のみと言う 滅ぶ為には一度栄える必要があるからな
滅ぶことすらできない言語が死屍累々 str.replaceとre.subがどっちがどっちだったか覚えられません >>874
知識がないようだけど、配列はすべて参照型というわけではない。
同じバイト数のデータ型なら、連続の領域を使う。
動的メモリ確保をして、メモリの断片化をさせる実装はあまりに無駄が多い。 RAMがハード的に仮想アドレスを持てるようにすれば、
ソフトが断片化とか気にしなくてよくなるな CPUにMMUが追加されたかなり昔からOSが似たようなことをしているわけで >>883
何言ってんだ?
全て参照だぞ
>同じバイト数のデータ型なら、連続の領域を使う。
これもデータをメモリに格納する話
先頭アドレスだけ解ればデータ型のビット数で算出出来るでしょ ちんちんシュッシュッ
>>886
pythonはレジスタ長では >>883
全参照なのでそこは間違い
連続になるのはcで連続に扱ったほうが高速に動くように改善されたデータ型だけで
必ず連続になるわけではないよ >>890
>連続になるのはcで連続に扱ったほうが高速に動くように改善されたデータ型だけで
Pythonのlistにそんな最適化はされてなくない? 何故appendするとappend後のものを返すんじゃなくて元データが変更されるのか >>893
>>832のソース見てもわかるようにそういう機能は無いね
>>894
appendは何も返さない
新しいlistを生成して返すのではなく
元のlistをmutateするのはそのほうが効率がいいから >同じバイト数のデータ型なら、連続の領域を使う。
「連続領域を使う」というのは「配列の中身がポインタじゃなく実データになる」という意味なんだろうけどバイト数が同じかどうかで判断したりはしないでしょ
少なくともndarrayやarray.arrayはそういう実装にはなってない
他の言語の話だとしてもバイト数で判断する実装というのは聞いたことがない 読んでないけど、普通に実装したらポインタの配列にするのでは array型すら中身はポインタだろ
値を直接突っ込む意味がない pythonで扱う対象は全てオブジェクトです
というのは、高級なことを言ってる訳でもなくて、
全部ポインタで管理してるというだけの意味なんだよな
数字の1を入れたいと思っても、
0x01とか0x00000001を直接入れずにその実体は別にあってそのポインタを入れる >>898
array.arrayそれ自身はPyObjectのポインタだけど
配列に格納してる中身はポインタじゃなくて実データ
取り出す時にPyObjectのポインタに変換してる 値を直接突っ込む意味はポインタのデリファレンスが必要なく
ローカリティが高いので処理によっては高速化できる(numpyが好まれる理由はこれ)
あとは必要なメモリサイズを小さくできる >>886
Pythonの配列のことではない。Pythonはコンテナというコレクションしかないので、他のプログラミング言語からするとアクセスの遅いコレクションしかないという何とも言えないクソ >>890
リストあたりは連続領域だよ?
要素に次の要素のアドレスが入っている。 >>899
それは違う。普通の変数は関数などの呼び出し時にその変数の領域が割り当てられる。 Pythonのスレはコンピューターをわかっていない人間が多すぎるよか 関数の引数で渡されるのが変数の実体なのか参照なのかは参照渡し云々で、
オブジェクトとして管理してるかとは別次元の話 >>908
関数というサブルーチンを呼び出すときはCPUがスタックに呼び出し元の情報を保存して、関数というサブルーチンをプログラムからメモリにコピーする。
ノイマン型コンピューターなんだから、プログラムが保存されているところと、実行するプログラムは別物。 スタックから取り出したものが実体なのかポインタなのかは実装次第
コンピューターをわかっていない人間が多すぎる ID:oNhs0c9T0の言ってることは、一見それらしいことを言ってるように見せかけて全部メチャクチャなので読む努力をしない方がいい
わざとやってるのかな? >>910
スタックはメモリ構造のこで、スタックにブッシュしたメモリのアドレス順とは逆にポップではメモリの値を戻す。 GPT-4oに頭の悪い文章を書かせるテストをしています >>906の頓珍漢レスを解説すると
彼が「関数などの呼び出し時に割り当てられる変数の領域」と読んでるものはスタックフレームのこと
対して>>899はスタックフレーム内の各変数が指してるのが
内部表現ではポインタなのか実体なのかという話をしてる
Pythonの場合は変数が指してるのはすべてポインタ(PyObject *)
もういちいち指摘しないけど>>903や>>904もすべて間違いなので
良い子は騙されないようにしましょう >>915
スタックはコンピューターのスタックでCPUの仕様
コンピューターを知らずに特定のプログラミング言語の用語だと思っているのか情けないねえ。 100%発達障害
- 文脈が全く読めない
- 自分だけに通じる言葉使い
- 異常なまでに過大な自己評価
- とにかく自己正当化する >>913
違う
ブッシュって何?
プッシュ(push)ね
間違えちゃダメだぞ >>916
CPUについて詳しそうだから聞くんだけど
なぜ逆ポーランド記法?
正規ポーランド記法もトルーマン記法でもよくないか? ぶん回してるのがオーバーフローかなんかで落ちるんだけど回避できるの?
エスパーよろ 一般論でいえば精度をあきらめるかアルゴリズム見直す
桁の上位・下位のベクトルで持つとか
いっそPython捨てるのもあり リソース無くなったら誤動作する、というのはCPUの宿命だよな
そこを絶対安全にするアイディアが無い 算術オーバーフローなのか
スタックオーバーフローなのか
バッファオーバーフローなのか
ヒープオーバーフローなのか
どれも回避は可能だけど
ものによっては手間がかかる (100!)!を計算するソフトをメモリ4kBで書いて ありがとう
例えば一定時間たったら自殺して再スタートとか、同じような別コード走らせてお互いに監視して死んでたら復活させるとかはインプレスのパイソン入門一通り全部理解した程度の私でもググればいけるレベルでしょうか? >>929
前者は別プロセスで処理を再スタートさせてから自分を落とす順序にすれば簡単
後者は初心者には難しい
あとはプロセスを定期的に監視して再起動するようなツールを使う手がある >>928
そんなに余裕持って書いていいの!?
超余裕じゃん96バイトあればかけるんちゃう? >>931
100!>2^100だから96バイトのメモリじゃ計算できないでしょ 非ノイマン的に、メモリは変数領域に全部使って良いとする >>930
ありがとう!
supervisorというのを見つけたんでこれやってみます! 子どもが言語を獲得していくのと同じようにAIモデルに学習させることに成功
AIの真価が加速する プログラミングやったことないんだけど、
すごく興味あります。自動学習的なやつとか特に。
たぶん、ある程度基本的なことを勉強したら、
どこかから画像認識できるプログラムのパーツ的なものを拝借して
作れるのかなと思ってるんですがあってますか?
あと、疑問なんですけど、
画像を読み込ませて学習するっていう話を聞いたことがあるのですが、
それってどんなものでも行けるんでしょうか?
例えば、産業用みたいな感じでベルトコンベヤーに乗って流れてきたものが
ギョウザだと認識できたらロボットアームでつかむ、
饅頭だと認識したらスルーみたいなプログラムと
おっぱいとお尻を区別するプログラム(昔ネットでやってる人を見ました)とかって
プログラム的には同じで覚えこませる画像が違うだけというイメージであってますか?
わかりにくい文ですみませんがご教授ください。 現実同様全ドメインを把握しなくても生活できるように
社会を構築しているのであってる
物事をモデル化するときは現実のようなしがらみが少ない分
できるだけ一般化を進めるので後半もあってる
どちらも良心に基づく話だから当てはまらない界隈も多いけど >>936
拝借して作れるけど精度上げたいなら転移学習
モノを掴むとかもできるけどラズパイのgpioなどをも学ぶ必要あり
見分けるには教師データが転移学習でも数千枚必要
そんなものを数千枚ずつ入れたフォルダを素面で見て自己嫌悪にならないなら作れるw ラズパイのプログラミングはまた別なんですね。
画像データって色々あると思うんですが、
動画取ってそのキャプチャ画像とかでも使えますか?
やっぱり解像度とか精度に影響与えますかね?
数千枚は確かに重労働ですね・・・ 良心はconscienceの訳語なのに、
conscienceの意味が全然理解されてないんだよな 4年前のソースコードgithubから落としてきたんだが
kerasとかtensorflowとかpytorchとか色々変更があって関数の変更がめちゃ大変
こういう時って
ライブラリを当時のバージョンに合わすか
関数を今のライブラリに変更するか
どっちがいいですか? なんかの仮想環境で当時のライブラリで動かすほうが簡単 巨大なら環境を合わせるしかないだろうけど、
大抵はちょっと直せば動く Google colabでseleniumどうやって動かすのです? digits1="0123456789"
print(digits1[2:4])
これで文字列"23"が返ってくるんだが"234"にならない理由ががわからん
インデックスが0から始まってるからインデックス2番目からインデックス4番目までの文字を表示するんじゃないの? 自称初心者は↓へ
【まず1嫁】くだすれPython(超初心者用) その59
ttps://mevius.5ch.net/test/read.cgi/tech/1689241721/ range(2,4)
とかも何が返るか最初は直感と違う
for i = 2; i < 4; i++
と同じだと判るとすんなり入る 箱と箱の間の仕切りのところにindexがあります
みたいな説明もよく見るけど、本質的ではないんだよな {'name1':1, 'name2':2}
みたいな辞書よりも、
[{'name':'name1', 'value':1}, {'name':'name2', 'value':2}]
みたいな辞書のリストで持った方がよっぽど取り回しいいな >>951
ソートが必要ならlist
不要ならdict >>951
郵便番号から住所を補完するプログラム書いてみ。 郵便番号をkeyにした住所の辞書ってどういう変数名にするのがいいんだろうな >>957
業務システムならそうかもしれないけど、分析用のコードとかだったらわざわざRDBMSに入れることしないでCSV直読みとかいうことも多いでしょ
「取り回しいいな」と言っている背景に、限定されたユースケースしか見えていないのでは?という疑問があるということ 住所しか引かないなら何とかなっても、
座標データも追加しようとした途端に破綻する >>960
それは値をどのように持つかの話でキーやインデックスをどのようにするかとはまた違う話なのでは?
リストにしたら0,1,2..と続く数値がキーに課される制約になる
RDBMSで高速化に使われるインデックス作成も辞書みたいなもので、なぜ導入されているかを考えると、
辞書的なアクセスができないのって結構実用プログラムを作る上で問題だということが予想できる
ちなみに値の方をなんでも辞書にしておけばいいというのは柔軟性の意味ではそうだけど、過度な柔軟性は仇となるのがわかってるからnamedtupleやdataclassがあるわけで、
「座標データも追加しようとした」ときに一旦考え直した方がいいことだと思うけどなあ >>958
例えばテラバイトのCSVをストレスなく読み込めるライブラリは少ない
データベースに入れておけばテラバイトでもOK
扱いがはるかに楽
データ分析屋はその辺りの感覚おかしい人が多い
基本的に素人みたいな人が多いからね その時はそれが最善だと思ったのに、ちょっとした仕様変更でデータ構造を根本から変更しないといけなくなった
それは見通しの甘さなのでは
辞書から辞書のリストへは根本変更で、
辞書のリストの名前追加はマイナー変更
改造を前提として、柔軟な設計とする
やりすぎると過剰設計 >座標データも追加しようとした途端に破綻する
どうして破綻するの? >>951
辞書でぶっこむのが多いのかな
クラスつくっていれてしまう レス数が950を超えています。1000を超えると書き込みができなくなります。