詳しくはNumPy配列の4種類の掛け算の使用を言います。


孔乙己が字の書き方が四つあると言った時、皆さんはこのような表情をしていると思いますか?
在这里插入图片描述
しかし、もし孔乙己がNumPy配列には4つの乗法があると言ったら、皆さんはこのような表情でしょうか?
在这里插入图片描述
実際、NumPy配列乗法は4種類以上あります。文章を書いたり読んだりする時、はっきりした論理と冷静な頭脳を保つために、本論文では四つの最も一般的な配列乗算について詳しく説明し、ベクトル点乗法とチャーシューの使い方を数学問題で示します。
1.星乗(*)
先に声明します。星乗という言葉は自分で作ったものです。行列の掛け算が他に高い名前があるかどうかは分かりません。演算子で表現するしかないです。配列星乗とは、配列の対応要素を掛け合わせることです。これはNumPyを初めて学んだ学生が最初に触れた配列乗算です。

>>> import numpy as np
>>> a = np.array([1,2,3])
>>> b = np.array([4,5,6])
>>> a*b
array([ 4, 10, 18])
多次元配列については、星乗の規則も同様である。

>>> a = np.arange(6).reshape((2,3))
>>> b = np.arange(6,12).reshape((2,3))
>>> a
array([[0, 1, 2],
    [3, 4, 5]])
>>> b
array([[ 6, 7, 8],
    [ 9, 10, 11]])
>>> a*b
array([[ 0, 7, 16],
    [27, 40, 55]])
たとえ2つの配列のsharpeが違っても、特定の条件を満たせば、同じ星番号で乗算でき、しかも交換法則を満たすことができます。

>>> a = np.arange(6).reshape((2,3))
>>> b = np.array([1,2,3])
>>> a
array([[0, 1, 2],
    [3, 4, 5]])
>>> b
array([1, 2, 3])
>>> a*b
array([[ 0, 2, 6],
    [ 3, 8, 15]])
>>> b*a
array([[ 0, 2, 6],
    [ 3, 8, 15]])
2.ポイント(np.dot)
数学では、ベクトルの点乗は2つのベクトルの対応するビットを掛け合わせた後に和を求めるので、ベクトルの点乗はスカラーです。

ベクトル点乗法の幾何学的意味は2つのベクトルのモードの積に2つのサンドイッチの余弦値を乗じたものである。これは、2つのベクトルが互いに垂直であれば、その点積はゼロであることを意味する。逆に言えば、2つのゼロではないベクトルの点積はゼロに等しく、2つのベクトルは垂直である。
numpy.dot()関数は、ポイント演算を提供します。一次元配列に対して,NumPyの点乗はベクトル点乗であり,その結果はスカラーである。多次元配列に対しては、一定の条件を満たす必要があり、その結果はスカラーではなく、多次元配列である。例えば、NumPyの行列を掛け合わせると、二次元配列の点乗となり、点乗に参与する最初の配列の列数は、二番目の配列の行数に等しくなければなりません。
在这里插入图片描述

>>> a = np.array([1,0,0])
>>> b = np.array([0,1,0])
>>> np.dot(a,b) #   a   b    ,    0
0
>>> a = np.arange(6).reshape((2,3))
>>> b = np.arange(6,18).reshape((3,4))
>>> np.dot(a,b) #       
array([[ 38, 41, 44, 47],
    [128, 140, 152, 164]])
>>> np.dot(b,a) #        
Traceback (most recent call last):
 File "<pyshell#38>", line 1, in <module>
  np.dot(b,a)
 File "<__array_function__ internals>", line 6, in dot
ValueError: shapes (3,4) and (2,3) not aligned: 4 (dim 1) != 2 (dim 0)
3.フォークリフト(np.cros)
百度と知道においては、フォークは外部積であるという人が多く、異なる意見を出す人もいます。私はここではフォークリフトやフォーク積などを使って、子弟を間違えないようにします。数学的には、二次元平面のベクトルフォークリフトは、結果として、2つのベクトルを端とする菱形の面積、3次元空間のベクトルフォークリフトであり、その結果は依然として1つのベクトルであり、乗算に垂直な2つのベクトル、すなわち、相乗に参与する2つのベクトルによって決定される平面の法ベクトルである。nunpy.cros()関数は、ベクトル(一次元配列)チャーシューを実現することができ、二次元または三次元配列のチャーシューを実現することもできる。

>>> a = np.array([2,0])
>>> b = np.array([2,2])
>>> np.cross(a,b) #       ,                 
array(4)
>>> a = np.array([1,0,0])
>>> b = np.array([0,1,0])
>>> np.cross(a,b) # x   y ,  z 
array([0, 0, 1])
>>> np.cross(b,a) #       ,        
array([ 0, 0, -1])
4.外乗(np.outer)
ここの外乗は星乗に似ています。一般的な概念ではなく、自分で作った言い方です。numpy.outer()関数に由来します。文面から見ると、outer関数は積を求めるように見えるが、実際の効果から見ると、デカルトの直積に似ているので、ここでは「外乗」を使いました。では、アウト関数は一体何ができますか?

>>> a = np.array([1,2,3])
>>> b = np.array([4,5,6,7])
>>> np.outer(a,b)
array([[ 4, 5, 6, 7],
    [ 8, 10, 12, 14],
    [12, 15, 18, 21]])
配列A外乗配列Bは、二次元配列を返し、この二次元配列のi番目の行は、配列Aのi番目の要素である星乗組Bである。
5.2本の直線が交わるかどうかを判断する
ab cdは欧氏の空間に不一致な四つの点があると仮定して、どうやって点abの直線と点cdの直線が交差しているかどうかを判断しますか?空間解析幾何学的方式を用いて問題を解決すれば,一般のプログラマにとっては難しい問題になるであろう。しかし、NumPyに詳しいなら、ポイント積(np.dot)とフォーク積(np.cros)を理解すれば、この問題を解決するのはとても簡単になります。具体的な考え方はこうです。
ベクトルabとベクトルcdのフォーク積を計算して、ベクトルorthを得て、orthの各要素が全部ゼロであれば、直線abが直線cdに平行であり、両者が交差することができないことを示します。そうでなければ、orthはベクトルabとベクトルcdに垂直にベクトルorthとベクトルacのポイント積を計算し、スカラーdpがゼロであればベクトルorthがベクトルacに垂直であることを示し、このとき直線abと直線cdは同じ平面上にあり、一定の点で交差する。
以上の考えをコードとして書いてください。

>>> a = np.array([1,2,3])
>>> b = np.array([4,5,6,7])
>>> np.outer(a,b)
array([[ 4, 5, 6, 7],
    [ 8, 10, 12, 14],
    [12, 15, 18, 21]])
ここではNumPy配列の4つの掛け算の使用についての記事を紹介します。NumPy配列の掛け算内容については以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。