Pythonのお勉強 Part72
レス数が900を超えています。1000を超えると表示できなくなるよ。
pythonの環境構築は色々ありすぎるな(´・ω・`) 嫌々pyenvにしたら、普通には使えるもののjupyterからは!which pythonでpyenvのものが参照されるのに、python自体はmacのdevtoolの3.9を参照してたり、まじで意味がわからない。macもpythonもセキュアにしようと思ってるのか厳しくなり過ぎじゃないの。
もう嫌になってシステムのpythonにインストールしようとしたら、インストールできないパッケージもあり頓挫。環境構築がつらすぎる。 >>668
JupyterでつかうPythonはJupyterのカーネル設定で行う
!はシェルの結果なので関係ない
そこは昔から変わってない jupyterのカーネル設定で、なぜか新しいのが認識されない。消した古いのpyenvを延々に参照したりしてる。minicondaもパスが自動で通ったり通らなかったり、プログラミング以外の部分があまりに辛すぎ。こりゃ大学もcolabになるわ。。。 >>670
docker使えよ
なんで生で使ってるんだ venvも現在のpython環境との依存があるから大して便利でもない pythonの環境作るのにpythonが必要な時点でナンセンスなんだよ pythonのバージョンをとっかえひっかえして使いたい人にとってはそうなのかもしれんが
俺はあんまり気にならんな Linux のローカル開発なら、Docker を使うのが簡単だが、
日本人が作った、多言語バージョンマネージャーのanyenv で、rbenv, nodenv も使える。
pyenv も同様。
asdf でも、多言語の好みのバージョンを入れられる
echo $(anyenv root)
ただし、$ANYENV_ROOT は定義されていない
/home/ユーザー名/.anyenv
echo $(rbenv root)
echo "$RBENV_ROOT"
/home/ユーザー名/.anyenv/envs/rbenv
echo $(nodenv root)
echo "$NODENV_ROOT"
/home/ユーザー名/.anyenv/envs/nodenv
システムに最初から入っているバージョンをいじってはならない!
他のアプリがシステムバージョンを使っているから、
それを変更すると、多くのアプリが動かなくなる
だから開発環境は、自分だけのユーザー環境以下の
/home/ユーザー名/.anyenv 以下に入れる
システムバージョンは、
file `which python`, file `which python2`, file `which python3` で確認できる。
/usr/bin/python, /usr/bin/python2, /usr/bin/python3 など pythonの仮想環境とやらがよくわからない
こいつら裏で何してんの? 単に特定のディレクトリに別のpythonをインストールしてるだけ
使う時は環境変数を切り替えてそのディレクトリを参照するようにしてる >>680
pythonは3.8、3.9、3.10、3.11と無限にバイナリを変える方針になったから
もうそれじゃ無理なんよ
完全に破綻する >>684
サポート切れとかでもない限りユーザーが必要なバージョンを使い続ける形でなんの問題もない 読みができるなら、自動翻訳が正しいかチェックできるので、書けるのと同じ >>686
サポートがすぐ切れるのがpythonのモジュールの特徴 パッケージなら自分が困るような不具合が見つかるかauditで指摘が上がるまで使い続けるかな
一生懸命最新バージョンを追いかけるモチベもないし そんなマイナーパッケージを使う方が悪いし、そもそもPythonとは関係ないだろw 普通に関係あるでしょ
Pythonのライブラリは古いバージョン対するサポート期間よりも
新しいバージョンへの対応がめちゃくちゃ遅いほうが問題
メジャーなライブラリでも3.12対応してないものまだまだある どんなプログラミング言語でもあることだし、使いたいライブラリに合わせてPythonのバージョンを選ぶくらい普通のことでは
JavaみたいにEOLまでの期間がめちゃくちゃ短いならわかるけど、
3.9ですらあと1年以上あるでしょ
そもそもOSSにそこまで期待してもねえ
金払って作らせてるならともかく
3.12を使わなければならない理由があるの?あるのだとしたら自分で直すぐらいの気概でいる必要があるのでは pythonで顔を検出してモザイクかけるのができるのなら
陰部に自動でモザイクかけることもできる?
というかそういうソフトってあるの? >>695
陰部がそのままなら難しくは無い
だけどオモチャだったりプレイだったりすると判定が難しい
まあ顔もそうでしょ
パーティグッズみたいなの付けてたら判定難しいのと同じ >>694
メジャーなライブラリが言語の新バージョンに対応するのに
半年〜1年かかるのが常態化してるのはPythonだけ
Java、C#、Go、Swift、Ruby、JavaScript、PHPあたりではなかなか見ない
3.9は去年の10月でSPEC 0のサポートが切れてるから特別な事情がない限り選択肢としては無い
Numpyとかでも既に落とされてる
言語の公式サポートは5年と長いけど
ライブラリの関係で実質サポートは2年〜2年半程度と短いのが実状 >>696
プレイは難しいか…
Inpaint-Anythingみたいなので頑張るしかないのな…
手動はもう嫌だ… >>694
JavaよりPythonのほうがランタイムのEOL短くね?
来年のEOLでどう更新するか既に頭痛いぞ お前らそんな事気にしてるのか?
客先でWindows95でVB5で動くシステムが現役で今でもメンテと追加機能開発が普通に有るんだぞ ちなみその客は大手チェーン店で件のシステムがインスコされてるPCが5万台だぞ クローズドだからいいんじゃね
本当にクローズドならな FC98がいまだに使われてるこんな世の中じゃ~(´・ω・`) ベーシックマスターLv2が半導体製造装置の制御に使われてるの見た時はびびった 今のpcのスペックにwin95でSSDとかなら胸が熱くなるなw
30年前のOS動いてるのを観測するとちょっともう1回見たくなる 大きな駅とかイベント会場に設置してある電子看板とか偶にシステムエラーでデスクトップ画面見えるけどWindows95とか多いからね 顔検出のやつでこういうの見つけたんだけど
https://huggingface.co/Bingsu/adetailer
import cv2
from PIL import Image
img = "https://farm5.staticflickr.com/4139/4887614566_6b57ec4422_z.jpg"
output = model(img)
pred = output[0].plot()
pred = cv2.cvtColor(pred, cv2.COLOR_BGR2RGB)
pred = Image.fromarray(pred)
pred
これをどういじれば赤枠内をモザイク処理させることができる? デジタルサイネージ Windowsでググると面白いな
95 98 MEでまだ動いてるんだな パチンコ屋のパネルはなんでぶっ壊れても直さないんだろうな Windows95は起動してるだけで何もしてなくても1週間で落ちる(面倒なので原因は追求しなかった) >>694
専ブラ動かすのにしか使ってないから実情知らんけど
JavaはLTS選べば長い方になるんじゃね
今からなら17
>>707
FC知らないのかガキめ if a < b:
flag = True
else:
flag = False
は
flag = a < b
と書ける
圧倒的にすっきりするけど、なんか頭に入ってこなくなる
どっちがいいんだろ 別にどっちでも良い
細かいことを気にし過ぎ
ただし頭に入ってこないってのは不味い
自分は書かなくても書かれてるコードを理解して頭に入る様にする必要はある 理解できない訳はないけど
0.1秒で判るか0.5秒かかるかという話 >>721
普通はどっちもダメ
単純な比較結果をフラグ化したりしない そんなこと言ったらflagという名前も具体的でないのでNG >>721
現実に前者を書くことは無いような気がする。大抵は、
if a < b:
flag = 'hinomaru'
else:
flag = 'union jack'
みたいな使い方でしょ。
a < b の評価値を保存したい場合は、自然と後者になるように思う。 filled = bool(count == limit)
みたいにbool()使ってたな
Pythonのand/orはbool返さない場合あるし 霊感的には、それは、
(flag = a) < b と解釈させたら、
flagがtrueかfalseにより動作が
違くなるような気がする。というか
flag ← (a < b) って感じで
ゼッタイ何時でもπソンは解釈するのだろうか。 flag = True if a < b else False
flagの代入以外に副作用ないならまずこう書くけど
flag = a < b
でいいやんとなる >>728
>(flag = a) < b と解釈させたら
Pythonの場合はflag=aがstatementで値を返さないのでそういう解釈をさせることができない
(flag=a)だけでもassignment statementの文法に反してるからエラー
(flag := a > b)と(flag :=a) > bでflagの値が変わる
前者が後者のように評価されないのは演算子の優先順位で決まってるから >>726
>a < b の評価値を保存したい場合は、自然と後者になるように思う。
boolを返すa < b を保存するのが妥当な場合ってどんな用途を想定してるの?
・a < bの処理にそれなりの時間がかかる
・a < bの結果を繰り返し使う
・比較演算子がbool値を返す
・関数ではなく演算子を使うのが妥当
俺は↑これを全部満たすような用途は思いつかない
いずれにしろflagを使うほうのコードも含めて考えたほうがいいように思う >>732
> ・a < bの結果を繰り返し使う
繰り返しというか、後で使いたいのだろうな。
a と b 各1ワードを保存できる余裕はないけれど、評価結果 1ビットなら64個保存できる! みたいな。いつの時代の話だよ... 元は、後でif文で使う条件が複数あって、最初Falseで初期化して、
一つでも成立したらTrueにして、みたいな処理になってた
で、いろいろリファクタリングしてる途中で、>>721みたいな変形があった
最終的には条件が1つになったのでそのままif文に入れた a, bが不変であっても
変数化することでコードの見通しがよくなるなら
情報が冗長になってもそうする
現実ではしないflagって命名に囚われてそう >>735
それは条件が複数あったとしても条件式部分を関数化して関数内で早期リターンするパターン forの中でアーリーcontinueとか、関数からアーリーreturnは便利に使うけど、
抜ける先が無くてアーリーなんやらできないと困る
関数内関数はなんか読みにくいし 735みたいに、コードの詳細がわからないのにこう書くべきって決めつけてくる人ってなんでなのかな
理想的なケースでは切り出しやすくても、泥臭いケースだと切り出しても見通し悪くなるだけ、みたいなこと
よくあるのに >>739
話題の発端の人だろ、 >>735 は。 仕様書を書いてないから、条件分岐の意味がわからなくなるんだよ。 >>739
>>740
ごめん、まちがえた。737だった。735すまん。 たくさんのファイルを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というのを見つけたんでこれやってみます! レス数が900を超えています。1000を超えると表示できなくなるよ。