PythonとRの習得方法について

このQ&Aのポイント
  • PythonとRの習得方法についてまとめました。
  • PythonとRは似ているが確実性に不安を感じる
  • CやFortranと比べてPythonやRの印象は異なる
回答を見る
  • ベストアンサー

PythonとRの習得の方法について

PythonとRは似ているように見えます。特に、マトリックスとかベクトルの掛け算をまるで数値の掛け算のように処理しようとしているところがあり、それ以外の言語を学んだものから見ると本当に大丈夫かなと思う面があります。初等的な数学が示すようにマトリックスは掛け算ができない場合があるからです。一方で2つの数値の掛け算の処理は例外が全くないと言っていいと思います。PythonやRで計算がおかしいとか、エラーが出るとき、マトリックスやベクトルの積でミスをしているということがあるかもしれないという不確実さから逃れられないように思うのですが。深層学習の本などではマトリックス計算が数多く出てくるので本当に大丈夫なのかなと思うのですが、どのように確実性の担保を取るのでしょうか。それがないと足元が揺らぐような気がするのですが。CやFortranは本当に電卓をたたいているような雰囲気で処理しているので確かな感じがするのですが、それとかなり違った印象なのですが。

  • Python
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8011/17119)
回答No.1

何を心配しているのかと思う。「マトリックスとかベクトルの掛け算をまるで数値の掛け算のように処理しようとしている」のと,それを自分で数値同士の掛け算を書くのとでは圧倒的に後者が安心できると思うがいかが。 「PythonやRで計算がおかしいとか、エラーが出るとき、マトリックスやベクトルの積でミスをしているということがあるかもしれない」なんていうのは,他の言語で数値同士の掛け算をするときにミスをしているかもと不安に思うのと同じだろう。 なお,fortranでの例ですが, real(8) :: mat(3,3) = reshape( (/1.0d0, 2.0d0, 3.0d0, 4.0d0, 5.0d0, 6.0d0, 7.0d0, 8.0d0, 9.0d0/), shape(mat) ) real(8) :: vec1(3) = (/-3.0d0, -2.0d0, -1.0d0/) real(8) :: vec2(3) vec2 = matmul( mat, vec1 ) こんな計算は普通にやりますよ。

skmsk1941093
質問者

お礼

回答ありがとうございます。まあsin(x)ですら怖いかと言われるとそれはないと言えそうですが、関数に放り込んで行列の積を計算する場合、列数と行数が違うと問題ですが、気を付けるのはそこだけともい言えそうです。 行列の積の計算って以下のようにまるで電卓をたたいているようなイメージでやっていたので。 sum=0 do i=5 do j=6 do m=1,4 sum=sum+a(i,m)*b(m,j) enddo enddo endo

関連するQ&A

  • pythonでの配列の計算

    pythonで、配列Aの各要素(数字)に対して別途定義された関数で計算して別の配列Bに保存する、ということを考えています(あまりにも初歩)。 Pythonでこのコードを書くことができません。CやFortranでは1つ1つの配列要素をループで巡って計算して新しい配列に保存するだけなのですが、Pythonだと配列のサイズの指定はしなくていいはずですね。また配列要素1つ1つを見て回るようなこともしなくていいと思います(裏ではやっているのでしょうが)。これはどういうコードになるでしょうか。ネットなどで調べても簡単すぎるのか逆にたどり着けないみたいです。よろしくお願いします。 私が使っているPythonのテキスト(分厚い)には索引に”配列”もありません。リスト、タプルになってしまったのでしょうか。 また、このような初歩的処理はJuliaでもいけるのではと思います。Pythonの文法を手掛かりにJuliaもできそうなので。

  • Pythonのプログラムの実行の考え方について

    pythonの教科書のサンプルの実行についてお尋ねします。 テキストのサンプルには普通、インタープリターで書いてあるものと、プログラムをファイルに書き出してそれをコマンドで一気に処理するもの(こちらの方が他の言語の実行に近いか)の2通りがあります。 インタープリター向きに記述されたものをファイルに書き出してpythonコマンドで、インタープリターと同じように実行するにはどのような書き換えが必要になるのでしょうか。結果を出力するときにインタープリターでは配列名を入力するだけでその内容が出力されたりしますが、ファイルではそれができないのでコマンドを指定するとかになると思いますが、他になにかあるでしょうか。 ファイルに書き出したプログラムの実行ですが、Pythonコマンドを実行しても実行形式の出力がないのでコンパイルではないわけですが、これはバッチとかシェルスクリプトと同じような意味になるのでしょうか。1行1行実行していくということですが。とするとインタープリターと同じになるのかなと思うのですが。 実行形式が単体のファイルとして出力されて単体として実行できるというのは従来のプログラム(C,Fortranなど)ですが、Pythonはそれがないわけですね。Ruby, Perlに近いものなのでしょうか。速度が求められる科学技術計算ではライブラリを導入して高速化できるということですが、どの程度かなと思いますが。その中間的なものがJavaなのかなと思いますが(半分実行ファイルみたな)。 たぶんベタな質問と思いますが、よろしくお願いします。

  • fortranでプログラムを作りたいのですが

    今学校で、txtファイルの数値データを数式処理しているのですが、そのtxtファイル数が多く、一つ一つエクセルで開いてやるのがとても面倒くさくて(エクセルの中ではマクロで処理しているが)困ってます。  そこでfortranでプログラミングして処理しようかと思っているのですが、それに関してわからない事があります 1.fortranのopen文はどんなファイルでも開けるか? 2.またfortranで開いて、計算処理できるファイルはtxt datなどのファイルしかないのか? 3.ファイル名が1~100のように順番になっている時1~100まで順番で開いて、それぞれに計算処理出  来るようなプログラムは可能か?

  • Python について質問です

    私はPythonの初心者です。 今Python でCSVのファイルを読んで数値だけ(数値以外に文字列や空白などがあります)を計算処理出来なくて困っています。教えて頂けませんか? 質問は、BB.csvというファイルの数値だけの合計と平均を計算したいです。 私のコードは以下です。 # coding: utf-8 import csv import re import string DATAFILE = 'BB.csv' class UnicodeDictReader(csv.DictReader): def __init__(self, f, fieldnames=None): csv.DictReader.__init__( self, f, fieldnames) def main(): total = 0 all_sum = 0 line_num = 0 with open(DATAFILE) as csvfile: reader = UnicodeDictReader(csvfile) for record in reader: # 値を数値で取得 A = int(record['38186']) B = int(record['38181']) C = int(record['38143']) item_total = A + B + C total = item_total all_sum += item_total line_num += 1 average = all_sum / reader.line_num print(" %d + %d + %d = %d " % ( A, B, C, total)) print(u"合計 %d " % all_sum) print(u"平均 %d " % average) if __name__ == '__main__': main() BB.csvは以下です、 38186,38181,38143 1,1,4 1,1,4 ,, ,, 2020,2020,2020 1412,1412,1412 625,625,625 75,75,75 75,75,75 75,75,75 75,75,75 4,4,4 4,4,4 4,4,4 7828,7828,7828 X,, 0,0,0 0,0,0 ○,, 0,0,0 0,0,0 0,0,0 ,,AAA 0,0,0 0,0,0 0,0,0 ,BBB, 0,0,0 0,0,0 0,0,0 ,, 0,0,0 ,, 0,0,0 0,0,0 ,, 0,0,0 0,0,0 750,750,750 400,400,400 400,400,400 ,, 0,0,0 0,0,0 0,0,0 ,, 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 6,6,6 6,6,6 18,18,18 18,18,18 18,18,18 18,18,18 18,18,18 16,16,16 16,16,16 6,6,6 6,6,6 18,18,18 18,18,18 18,18,18 18,18,18 18,18,18 11,11,11 11,11,11 11,11,11 3,3,3 3,3,3 3,3,3 3,3,3 4,4,4 4,4,4 3,3,3 3,3,3 16,16,16 16,16,16 16,16,16 14,8,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 15,15,15

  • テンソル積の定義と具体的な演算

    ベクトルには内積、外積、テンソル積(ディアド)があります。 (1,2), (-3,0)の内積、外積(3次元になるけど)はそれぞれ定義に沿って簡単に計算できます。テンソル積ではどうなるでしょうか。 テンソル積についてだけ、本を読んでも定義が述べられていないように感じます。テンソル積の性質とか成分の表現などは記述されていますが。テンソル積は2階までだったらマトリックスとして書けるけれども、高階だったら紙に正確に書けない(3階だったらキューブ、4階だったらもう無理)というようなことでしょうか。 ところで、この"定義"ですが、内積では、 A.B=AiBj(ei.ej)=AiBjδi,j=AiBi というのは定義とは言えないと思います。基底ベクトルの計算に内積が含まれているからですね。またこれが成立するのは直交座標系だけということになります。そういう意味でのテンソル積の"定義"を知りたいと思います。以前、テンソル積は難しいという意見がありました。しかし、難しい定義というのは存在せず、ややこしいとか、用語が難解で覚えにくいというのはあると思いますが。 また、○○積という言葉ですが、英語だとスカラー積、ベクトル積、テンソル積(これだけは日本語と英語が同じ?)ということで、その積の結果出力されるものの種類となっているということでよいでしょうか? また、表記について、内積(ドット)、外積(×)ですが、テンソル積は○←×としたり、2つのベクトルをただ単につなげて表記する(記号なし)場合もあります。古い本ほど○←×になっているような気がしますが、最近は記号なしが主流なのでしょうか。

  • 行列の積 内積 の関係について

    行列の積 内積 の関係について 行列の積と内積は同じであると説明があったのですが、 よく分かりません・・・ 例えば、A=(3、-2,1),B=(4,6,7)のベクトルの内積は A・B=(3×4)+(-2×6)+(1×7)=7となるのですが、 行列の積は(1行3列)×(1行3列)で計算できません。 どちらかのベクトルを転置化すれば計算できるのですが・・・ 列ベクトルや行ベクトルは転置しても同じベクトルなのでOKと言う事でしょうか? 内積の演算結果はスカラー(数値)で、行列の積の演算結果は 行列と認識しているのですがこの認識は誤りでしょうか? 列ベクトルや行ベクトルの積の場合はスカラーとなるのでしょうか? A=(3、-2,1),B=(4,6,7)において、ベクトルBを転置化してtBとすれば A×tB=(7)となります。これはスカラーとなりますでしょうか? (追加質問) また、以前ノルムに関して質問させて頂きました。 ご回答頂いた内容で大凡理解できたのですが、追加で一点だけ質問させて下さい。 VのベクトルAに対して、ノルムは ||A||=√(A・A)とされますが、これを||A||=√(A^2)と表記するのはおかしいのでしょうか?

  • 電卓処理

    初めて、書き込みます。よろしくお願いします。 C言語で、電卓を作成しようとしています。 計算処理は 足し算、引き算、掛け算はint型で行い、 割り算だけは、小数点を使いたいのでfloat型を使いたい と考えています。 また、計算結果の表示は、char型の文字列として表示する。 としたとき、問題として、 float型をchar型に変換する方法がわかりません。 どなたか教えていただけないでしょうか。

  • パソコンは本当に「電子計算機」?

    このカテゴリーでよろしいんでしょうか。 いまインターネットを通じて「ご質問」 させて頂いているわけですがパソコンを用いています。 このパソコンは本当に「電子計算機」なのでしょうか。 もしパーソナル・コンピューターならば 関数電卓のような「計算」や、FORTRANのような 言語で作動させられる「環境」あるいは「サイト」のよう なものがありますでしょうか。 要領の悪いご質問ですみません。

  • クーロン力と万有引力に関して。

    クーロン力を求める式というのは F=k0×(q1・q2)/r^2 ×r^ と書いてあったのは、わかったのですが・・・ 最後の上に^がついたrのベクトルはrの単位ベクトルなんですよね? これは計算の数値としては含めないのでしょうか? クーロン力を計算するときに単位は (N・m^2)/c^2 × c/m^2 という計算になりますよね? そうすると、分母にCが残ってN/cになると思うのですが、そのままでいいのでしょうか? どなたか、よろしくお願いします!!

  • オートSUMの答えがどうやっても合わないのですが・・・・

    エクセル2000を使用しています。 縦計算と横計算程度のそれほど難しくないワークシートを作りましたが、ある列の縦計算(その列の数値の合計)がどうしても合いません。電卓で確認しましたが、どう計算してもエクセルの答えが誤っているのです。 ・その列の合計されるべき列(R11~R31)には(=$N$6*Q11~Q31)が入っている。(N6及びQ11~31は実数が入る) ・その合計の答えが入るべきセル(Q32)には(=SUM(R11:R31))が入っている。 ・隠れている行や見えない行は無い。(行番号で確認) ・エクセル上の答えが実際の数値(電卓による)より2少ない どう考えてもコンピュータが間違っているとしか思えません。こんな事ってあるんですか? 解決法があればおしえて下さい!!

専門家に質問してみよう