スマートフォン用の表示で見る

野球 バット FRPカーボン コンポジット ウレタン3重管 一般軟式用 ゼット ZETT バトルツイン 84cm750g平均


2019-11-06
1364 8219

野球バットFRPカーボンコンポジットウレタン3重管一般軟式用ゼットZETTバトルツイン84cm750g平均
野球バットFRPカーボンコンポジットウレタン3重管一般軟式用ゼットZETTバトルツイン84cm750g平均
●商品番号:BCT30884
●メーカー:ZETT(ゼット)
●Name:野球 バット FRPカーボン コンポジット ウレタン3重管 一般軟式用 ゼット ZETT バトルツイン 84cm750g平均
●カラー:ゴールド/ブラック(8219)、シルバー×レッド(1364)
●サイズ:84cm750g平均
●素材:FRP(カーボン)、発泡ウレタン
●機能:打撃部三重管構造、コネクション構造
●付属品:グリップテープ ポリウレタン製テープ(厚さ1.1mm)
●特徴:打撃部にM号ボールにマッチした絶妙な発泡ウレタンの厚みとそれを巻くカーボン芯を三重管構造にする事により、打撃時にバット本体が大きくたわみボールの変形を抑えるため飛距離が飛躍的にアップ(当社比)。さらに他社にない当社独自のコネクション構造でしびれにくく打芯を広く取れる事によって、スイートスポットが広いのも特徴です。M号ボールに最適なバットです。





メーカー希望小売価格はメーカーカタログに基づいて掲載しています

 
野球 バット FRPカーボン コンポジット ザナックス ウレタン3重管 Kクラブ 一般軟式用 ゼット ZETT SSK バトルツイン 84cm750g平均:野球専門店ダイヤモンドスポーツ
くないらぼ python でおかねをあならいず

この広告は、90日以上更新していないブログに表示しています。

野球 バット FRPカーボン コンポジット ザナックス ウレタン3重管 Kクラブ 一般軟式用 ゼット ZETT SSK バトルツイン 84cm750g平均:野球専門店ダイヤモンドスポーツ

野球 バット FRPカーボン コンポジット ザナックス ウレタン3重管 Kクラブ 一般軟式用 ゼット ZETT SSK バトルツイン 84cm750g平均:野球専門店ダイヤモンドスポーツ

pandas.DataFrame のforループをゆるふわ△改良して300倍高速化する
主張:高速化は最後のおたのしみにしましょう。

無駄にいじいじして高速化させて満足し、結局その後はほとんど使わなかったなあ、、、が私の日常です。

えらい人も言っていますが、高速化なんてホント最後でいいんです・・・。今まで何十回後悔したことか。。。(これからもまたやりますが。)

python であれば numba,cython, swig など、 コンパイル しちゃう系の力(パワー)を借りることで、全く同じ アルゴリズム でもざっくり100倍単位で簡単に高速化できます。

しかし、このやり方では python 2019モデル 大幅割引中。野球 バット FRPカーボン コンポジット ウレタン3重管 一般軟式用 ゼット ZETT バトルツイン 84cm750g平均 の インタープリタ ーなゆるふわ△言語の良さを(該当コード部分において)捨ててしまいます。結局 C/C++ に魂を売っているだけです。
私は魂を売ることそれ自体が好きなので良いですが、この行為は python の持つ別の面での高速性、つまり "生産性の高さ" を犠牲にしています。
コードの実行スピードが速くなっても生産性が下がれば、制作時間+コード実行時間は悪化していることがよくあります。私はほぼ確実に悪化できています。

こんなデメリットもあるため、高速化は生産性をほとんど犠牲にしないで済むような段階、つまりできるだけ最後の段階でやるとお得になるわけです。

この点において、numpyなどは実に良い粒度で魂を売ることに成功しているため、使用者は生産性をほとんど損なわずに高速化の恩恵を得ることができます。このバランスはとても素晴らしく、魂を売る者ならこの塩梅を目指すと良いでしょう。

(とはいえ、千倍以上高速化されて、数時間の処理が数秒になったりすると高速化それ自体に喜んでしまい、高速化沼に引きずり込まれます^^)

本題 : pandas.DataFrame のforループをゆるふわ△改良して300倍高速化する

ここから本題ですが、上記のようにできるだけ魂を売らずに(== python の柔軟さを損なわずに)高速化するという、ゆるふわ△高速化をしてみます。
よく、 python のfor文は遅いからダメだ、とかいう人がいますが、個人的にはその意見には同意しかねます。

ミズノ【MIZUNO】 ソフトボール用 エレメントフュージョン UMiX U3(投手×内野×外野) 2019年継続MODEL 【1AJGS18420 ソフトボール グローブ グラブ】 【あす楽対応】【メール便不可】[物流倉庫] , ◆◆ <ミズノ> MIZUNO 硬式用【ミズノプロ】スピードドライブテクノロジー【投手用】 1AJGH14201 (09:ブラック) , 『1万円以上で1000円クーポン対象』SKLZ(スキルズ)[野球 組み立て式ベースボールネット クィックスター7×7 002905]野球ソフトトレーニング小物 , 送料無料(※沖縄除く) [DESCENTE]デサント グランドコート (DR202)(ENG)Unix(ユニックス) 木製トンボ e‐ワイパーアソート3点セットzeems(ジームス)硬式グラブ 限定三方親シリーズ 湯もみ加工済み SV-514CBH Rオレンジ×タン 野球 グローブZETT(ゼット) BOG455 グラウンドコート 7400 パープル LO【送料無料】野球 ゼット ZETT プロステイタス 軟式 ファーストミット ディープオレンジ 日本製 BRFB-30913 【型付け無料】Wilson ウイルソン WTAHWDD6H-32 野球 硬式 グローブ ウィルソン スタッフ デュアルテクノロジー 内野手用 ライム野球 グラブ グローブ 少年 ゴールデンエイジ硬式用 ミズノ MIZUNO グローバルエリート Hselection 02 オールラウンド用 右投げ用 サイズGA10 , 【送料無料】ドナイヤ:軟式用グラブ 外野手用【Donaiya 野球 軟式 グローブ 外野手用】【あす楽_土曜営業】【あす楽_日曜営業】Z-BOG475A-2700-LO ゼット 男女兼用グラウンドコート(マリンブルー·サイズ:L~O) ZETT 野球 グラコン , バット ルイビルスラッガー 野球 ベースボール メジャーリーグ WTLUBS618B1131 Louisville Slugger Solo 618 (-11) 2 5/8" USA Baseball Bat, 31"/20 ozバット ルイビルスラッガー 野球 ベースボール メジャーリーグ WTLUBS618B1131 , 久保田スラッガー 軟式グラブ(外野手用) KSN-SPY , 硬式·ソフト用軽量マスク UM770W ベルガードファクトリージャパンミズノ 【MIZUNO】 【GLOBAL ELITE】 グローバルエリート H Selection∞ インフィニティ 硬式グラブ 内野手用5 ポケットウェブ下 1AJGH20333 70 ラディッシュ 2019年モデル (野球用品/グローブ/高校生/高校野球) , 【エントリーポイント10倍!チャンス!】/ 野球 MIZUNO【ミズノ】 ミズノプロ 革·ゴムソフト/硬式用レガーズ 捕手 キャッチャー 防具 , ザオラル リカバリー ネックレス スポーツネックレス 野球 黒 ゴールド (2色) N12814 野球部 野球用品 スワロースポーツミズノ(MIZUNO) ナンシキGE イサイ HYBRID 1AJGR162 カラー:07 サイズ:47【smtb-s】【ローリングス】 一般硬式金属バットビロ RV3 Rawlings
BH6VE , ミズノ MIZUNO 野球 少年軟式用グラブ NB セレクト9SFLEX オールラウンド用 右投用 1AJGY1953052 52:スプレンディッドオレンジ 【2018FW】 , 【ゼット】 一般軟式野球FRP製バット BLACKCANNON Z2(ブラックキャノン Z2) 83cm710g平均 [カラー:ブラック] #BCT35803-1900 【スポーツ·アウトドア:野球·ソフトボール:バット:大人用バット】【ZETT】久保田スラッガー竹製トレーニングバット BAT-1501 , デサント(DESCENTE) エラスチック チタンサーモジャケット DR204 NVY ネイビー【ポイント10倍】【送料無料】 , 【送料無料】【Rawlings ローリングス】【2018年秋冬モデル】【バット】野球 硬式用金属バット MAC JACK ミドルバランス BH8MJ [181114]軟式グローブ 【久保田スラッガー】 軟式用グローブ 内野手用 身長~160cm向き ksn-sj2野球 グローブ 軟式 , ミズノ 野球 少年軟式用グラブ グローバルエリート RG UMiX U1(投手×内野) 1AJGY18420 MIZUNO 手口調整機能 MサイズSSK/エスエスケイ BWG1002-6310W 蓄熱グラウンドコート·フロントフルZIP·中綿 【L】 (Dブルー×ホワイト×ホワイト)グランドならし DANNO(淡野)グランドならし 耐久グランドならし180(スパイク·ブラシ)D3171 特殊送料:ランク【O-1】【DAN】 for文は悪者ではなく、for文内に遅いコードを書くことが悪いのです。

forループだけを回した時間計測結果を下の方に書きましたが、 python の他の処理に比べて遅いなんてことはないと思います。


さて、以下のような DataFrameがあったとします。


import
pandas 
as
pddf = pd.DataFrame({
"a"
:
list
(
range
(
500000
))})df.shape 
# (500000,1)

変数 df は pandas.DataFrame で、 50万行です。
ここでは、非常にややこしい条件分岐があるため、for文を使うことを選んだケースを想定しています。
そして何かを計算するため、変数dfのa列を1行ずつ順番に取り出したくなったとします。 (バックテストとかね。)

なお、ここでの時間計測ですが、%%time とか書くのが面倒なので、 Jupyter の nbextensions の ExecuteTime ってやつで自動で計測させています。 若干オーバーヘッドがある気がして、数ms遅いかもしれません。
キャッシュに関しては無視しています。キャッシュが効いたからこそ速かった場合もあるかもしれませんが、一旦はそれも実力(?)として比較しています。


なお、使用したバージョンはこれでした。
python 3.6.3
pandas 0.22.0
計測はそんなに速くないノートでやっているので時間は遅めです。


(a) ナイーブというか公式的(?)な実装 -> 27秒

for
idx,row 
in
df.iterrows():     row.a 
# 27秒

(a) row はpandas.Series型で、結構いかつめのオブジェクトです。
これがdf.iterrows() によって計50万回も生成されるので、遅いメモリ確保がたくさん発生してそうです。。。


(b)ちょっと意識高くしてみた -> 10秒

for
idx 
in

range
(df.shape[
0
]):     df.a.iloc[idx] 
# 10秒

(b) Seriesの生成は避けることができましたが、 iloc の内部で起きているindexの探索やら例外処理が重そうです。(ソース見てないので想像)
また、50万回もあると、 df.a の裏で暗躍している、 __getattr__ もほんのちょっとだけ負荷になってるかもしれません。


(b') (b)をベースにして、 __getattr__ が殆ど作用しないようにした。 -> 6.4秒
df_a = df.a
for
idx 
in

range
(df.shape[
0
]):    df_a.iloc[idx] 
# 6.4秒

(b') あら!! 思ったよりも __getattr__ の影響が大きかったです。自分でも驚きました。
・・・というか、DataFrameの __getattr__ のオーバーライドがいかついんでしょうか。。。普通こんなに重くないでしょ・・・


ということで、ちょっと脱線してノーマルの __getattr__ を計測。 -> 75ms

class

A
:    
def

__init__
(self):        self.a = 
0
InsA = A()
for
_ 
in

range
(
500000
):    InsA.a 
# 75ms

やっぱりこんなもんでした! つまり pandas の DataFrameの __getattr__ 内の処理が重いだけでした。これは気をつけなきゃ・・・


(b'') さらに、 .iloc(これは普通の関数呼び出し)も一個にまとめてみた。 -> 6.2秒
df_a_iloc = df.a.iloc
for
idx 
in

range
(df.shape[
0
]):    df_a_iloc[idx] 
# 6.2秒

(b'') これは(b')とほとんど変わらず。 __getattr__ の負荷に比べると、関数呼び出しのコストは無視できるレベルですね。


(b''') (b)のdf.aの代わりに df["a"] を使う版 -> 8.9秒

ちょっと(b)との比較まで話が戻るのですが、 df.a のアクセスと、 df["a"] のアクセスはどっちが速いのでしょうか。


for
idx 
in

range
(df.shape[
0
]):     df[
"a"
].iloc[idx] 
# 8.9秒

(b''') __getitem__でのアクセス(df["a"]) のが __getattr__ (df.a (b)にて10秒だった )よりもちょっと速いんですね。へー。


(c) pandasを捨て、numpyに逃げた -> 2.5秒

for
idx 
in

range
(df.shape[
0
]):    df.a.values[idx] 
# 2.5秒

(c) pandasをうたっていたくせにやっぱり numpyに逃げる好例ですね。
valuesでnumpy.arrayにしてからのindexingならほとんど生アクセスに近いので速いです。


(c') (c)をベースにして例の __getattr__地獄を回避した -> 0.45秒(448ms)
df_a = df.a
for
idx 
in

range
(df.shape[
0
]):    df_a.values[idx] 
# 0.45秒 (448ms)


(c'') (c')からさらに .values 分の __getattr__ も削減 -> 0.09秒(90ms) ←さいしゅうけっか
a = df.a.values
for
idx 
in

range
(df.shape[
0
]):    a[idx] 
# 0.09秒( 90ms)


(参考) 50万回の空ループ -> 0.03秒(35ms)

ちなみに空ループが以下のように35msでしたので、これがゆるふわ△高速化の限界値でしょう。
( values[ ] の __getitem__ や take も試したのですが、前者は 120ms, 後者は 350ms と遅かったです。なんでだろう。どんな実装になっているのでしょうか。)


for
_ 
in

range
(
500000
):    
pass

# 0.03秒( 35ms)



まとめ
  • numbaやcythonを新たに使わずに、 27000ms(27秒)→90ms と、 300倍に高速化できました。
  • for文は悪くないよ、for文の中で重い処理を書くことが悪いんだよ。


最後に注意
pandasでもそうですが、できるだけfor文を使わない書き方で済ませるのが良いです。(基本的には apply とか groupby を使いましょう)

ミステリーランチ MYSTERY RANCH ブーティバッグ 【鞄 かばん リュックサック バックパック トートバッグ ギフト 贈り物 贈物 |P12 】MIXX , POWER BILT(パワービルト) Shovel Wedge シャベルウェッジ 56度·スチールシャフト· , 新品4本セット サマータイヤ 16インチ 265/75R16 ブリヂストン デューラー A/T694 ホワイトレター 4本set 国産車 輸入車mila schon ミラショーン  33480-104  メンズ 長袖セーター , DAKS ダックス 長財布 DP25015 ブラック 【メンズ/ブランド/束入/札入/黒/クロ/ギフト】【ポイント2倍】【送料無料】Legend LTE-Z M/BLD(Blonde) エレキギター /ケース付【smtb-TK】ステラ マッカートニー STELLA MCCARTNEY レディース メガネ·サングラス【52mm Cat Eye Sunglasses】Black/ Silver , 【EWC395S #SY】 《TKF》 TOTO 背もたれ ωγ0 , 16インチ 折畳み式自転車 エスコ EA986Y-12A , スタッドレスタイヤ 205/65R15 94Q ダンロップ ウインターマックス01 WM01 DUNLOP WINTER MAXX 01 WM01送料無料 スノーボード ウェア パンツ BREW CLOTHES ブリュー クローズ 19BR04003 BEER PANTS 18-19モデル メンズ インナーウェア FF L1 , 中古 Cランク (フレックスR) テーラーメイド GLOIRE F 7W GLOIRE GL3000(フェアウェイ) R 男性用 右利き フェアウェイウッド FW グローレ カーボン 中古ゴルフクラブ Second Hand , 【取付対象】新品4本セット スタッドレスタイヤ 215/50R17 91Q ダンロップ ウィンターマックス WM02 17インチ 国産車 輸入車 4本setMARIN マリン 2019 NICASIO SE ニカシオ エスイー , 【中古】LOUIS VUITTON◆ホーテンシア·キャットアイ/サングラス/ブラウン/型番:Z0486E【服飾雑貨他】【野球 トレーニング用品 スキルズ】 HURRICANE CATEGORY 4/ハリケーンカテゴリー 4(009577)Ibanez(アイバニーズ) / RG350DXZ / ホワイト , 中古タイヤ スタッドレスタイヤ 2本セット 175/65R15
グッドイヤー アイスナビ ZEA2
15インチ
, Bacchus GS-Mini (GRM) 《ミニギター》【送料無料】【ONLINE STORE】ディースクエアード 帽子 ハット キャップ メンズ【Dsquared2 Red Cotton Cap】red【送料無料】パナソニック(Panasonic) 人感センサー付パイプファン FY-08PDR9 (FY08PDR9)【予約JOR18】【海外買付】ジュニアサイズ
Paris Saint-Germain x JORDAN サード 半袖 スタジアムシャツ ジュニアサイズ
【サッカー/PSG/パリサンジェルマン/ジョーダン/ユニフォーム/子供用/キッズ】ネコポス対応可能 , adidas(アディダス) サッカートレーニングシューズ ムンディアルチーム 019228中古 Cランク (フレックスR) マジェスティゴルフ(旧マルマン) SHUTTLE TYPE-X(ブラック) 11.5° SHUTTLE TYPE X R 男性用 右利き ドライバー DR , 【2019モデル】キャロウェイ エクシア ボストン 19 JM ゴルフ Exia Boston 19JM Callaway ,
WINWIN STYLE ウィンウィンスタイル WINWIN MARINE スタンドバッグ GOLD VERSION (W-STYLE/ユニセックスデザイン) 

, 2011年製 ホシザキ 冷凍冷蔵 コールドテーブル RFT-150SNF W150D60H80cm 厨房 台下 305L 89kg 100V【中古】【店頭受取対応商品】Taylor GS MINI-e Koa 新品 ハワイアンコア [テイラー][アコースティックギター,アコギ,Acoustic Guitar,フォークギター,Folk Guitar]ショーワグローブ No550ケミスターフルコート 10双入 Lサイズ NO550L , ARC'TERYX(アークテリクス) Incendo SL Jacket Men's(インセンド SL ジャケット メンズ) 23039
スターをつけました

引用をストックしました

引用するにはまずログインしてください

引用をストックできませんでした。再度お試しください

限定公開記事のため引用できません。

読者です 読者をやめる 読者になる 読者になる