Google Slidesで大量の画像を貼り付ける方法

はじめに  

大量の画像をスライドに貼り付ける作業を自動化するための記事です。数行のスクリプトで実行することができます。  

目次

  1. 画像を貼り付けるまでの手順

 

画像を貼り付けるまでの手順

まずGoogle Driveに貼り付ける画像を用意して一つのフォルダにまとめます。そのフォルダのURLは次のようになっています。

https://drive.google.com/ ... /folders/1lgfiherogihoe

このURLのfolders以下の文字列がフォルダのIDになっており、画像をスライドに貼り付ける際に参照します。




Google Slidesを開いてExtension(拡張機能)→Apps Script




変数idにGoogle Driveの画像フォルダのIDを入れるとスライドに画像を貼る動作が始まります。

function myFunction() {
  const id = "**Your Google Drive folder ID**"
  var files = DriveApp.getFolderById(id).getFiles()
  while (files.hasNext()) {
    var file = files.next();
    console.log(file.getMimeType())
    if (file.getMimeType()==="image/png"){
      var slide = SlidesApp.getActivePresentation().appendSlide();
      slide.insertImage(file);
      Logger.log(file.getName());
    }
  }
}

ABC239

はじめに  

目次

C: Knight Fork

D: Prime Sum Game

E: Subtree K-th Max

C: Knight Fork

問題のページにわかりやすい図があったおかげで解けました。
図を書いてみること、実験をしてみることを心になじませます。
今回の問題では距離 \sqrt{5} の格子点(整数の組)ということで探索範囲を絞ることができます。
2回、距離 \sqrt{5} を移動してもう一方の座標に到達するかを調べます。

f:id:spd919:20220316230458p:plain
2回移動

#相対的な位置の一覧 (書き下せるほどの少ない例なら書いてしまう)
cand_rel_list = [(2,1),(1,2),(-2,1),(-1,2),(-2,-1),(-1,-2),(2,-1),(1,-2)] 

for cand_op in cand_rel_list:
    cand = (x1-cand_op[0]-x2,y1-cand_op[1]-y2) #1回移動
    if cand in cand_rel_list: #もう一回移動できる範囲に目標の座標があるか
        flag = True 
 
if flag:
    print('Yes')
else:
    print('No')

D: Prime Sum Game

素数とは次のような整数です.

素数(そすう、英: prime number)とは、2 以上の自然数で、
正の約数が 1 と自分自身のみであるもののことである。

素数-Wikipedia

素数を求めるには約数が存在するかを調べていけばよいです. 約数が存在するとき2つ以上の整数で表されるため  \lfloor \sqrt{N} \rfloorの値まで調べれば約数の候補をすべて考慮することができます.

今回の問題では勝敗を決定するために素数のリストが必要になります.素数リストを作成するためにエラトステネスの篩を使用します.

f:id:spd919:20220319223022g:plain
エラトステネスの篩

#author: kyopro_friends

prime=[True]*201
prime[0]=False
prime[1]=False
for p in range(15):
  if prime[p]:
    for i in range(p*p,201,p):
      prime[i]=False

E: Subtree K-th Max

公式の解説に出てくる用語を調べる必要がある。

要更新 !

オイラーツアー

セグメントツリー

座標圧縮

Wavelet Matrix

参考文献

公式C解説
公式D解説
公式E解説

多変量ガウス分布に親しむ

はじめに  

一変数のガウス分布は図的に理解をしやすいですが
多変数になると行列が出てきて複雑になったような気がします。
式中に出てくる共分散行列と親しみましょう。

目次

  1. 多変量ガウス分布

  2. パラメータの数

  3. マハラノビス距離

多変量ガウス分布

行列やベクトルで複雑な式は書き下したり数日置きに見直すとはっと気づきがあったりします。 では平均 \boldsymbol{\mu}と共分散行列 \boldsymbol{\Sigma}に注目して式を見てみましょう。

 \displaystyle
\mathcal{N}(\boldsymbol{x}| \boldsymbol{\mu}, \boldsymbol{\Sigma})=\frac{1}{(2\pi)^{\frac{D}{2}}} \frac{1}{\left|\boldsymbol{\Sigma}\right|^{\frac{1}{2}}} \exp⁡( -\frac{1}{2} \left( \boldsymbol{x}-\boldsymbol{\mu} \right)^{\rm T} \boldsymbol{\Sigma}^{-1} \left(\boldsymbol{x}-\boldsymbol{\mu}\right) )



この分布には多くの行列やベクトルが含まれていますが 計算されて出てくるのはスカラの確率密度一点です。
主に認識しづらくしている要素は次の2つでしょう。

共分散行列の行列式

 d=\left|\boldsymbol{\Sigma}\right|

2次形式

 \Delta^2=\left( \boldsymbol{x}-\boldsymbol{\mu} \right)^{\rm T} \boldsymbol{\Sigma}^{-1} \left(\boldsymbol{x}-\boldsymbol{\mu}\right)


どちらの値もスカラですので見た目よりも複雑ではありません。

 \displaystyle
\mathcal{N}(\boldsymbol{x}| \boldsymbol{\mu}, \boldsymbol{\Sigma})=\frac{1}{(2\pi)^{\frac{D}{2}}} \frac{1}{d^{\frac{1}{2}}} \exp⁡( -\frac{1}{2} \Delta^2 )

パラメータ

共分散行列

3×3の共分散行列は {\rm Cov(x_i,x_j)}= {\rm Cov(x_j,x_i)}ですから対称行列になっています。

 \boldsymbol{\Sigma}=
\begin{pmatrix}
{\rm Cov(x_1,x_1)} & {\rm Cov(x_1,x_2)} & {\rm Cov(x_1,x_3)} \\
{\rm Cov(x_2,x_1)} & {\rm Cov(x_2,x_2)} & {\rm Cov(x_2,x_3)} \\
{\rm Cov(x_3,x_1)} & {\rm Cov(x_3,x_2)} & {\rm Cov(x_3,x_3)} \\
\end{pmatrix}

共分散行列は上三角行列分の自由なパラメータを持っていることがわかります。 上三角行列の要素の個数は右上から数えれば次のような数列になります。

 param=1+2+3+ \cdot \cdot \cdot + n = \dfrac{1}{2}n(n+1)



共分散行列によってどんな分布に変わるでしょうか。対角成分のみの共分散行列では値が小さいほうが狭い範囲に収まっています。

f:id:spd919:20220310220149p:plainf:id:spd919:20220310220244p:plain

 
\begin{align}
\boldsymbol{\Sigma}=\begin{pmatrix}
0.5 & 0  \\
0 & 0.5 \\
\end{pmatrix} & \qquad \qquad \qquad \qquad
\boldsymbol{\Sigma}=\begin{pmatrix}
1 & 0  \\
0 & 1 \\
\end{pmatrix}
\end{align}

f:id:spd919:20220310220232p:plain:w400:h300

 
\boldsymbol{\Sigma}=\begin{pmatrix}
1 & 0.8  \\
0.8 & 1 \\
\end{pmatrix}



対角以外で共分散の成分がある場合、正の相関があるように見えます。 片方が大きな値を取る場合、もう片方も大きな値を取る傾向があります。

マハラノビス距離

ガウス分布の2次形式をマハラノビス距離といいます。

 \Delta^2=\left( \boldsymbol{x}-\boldsymbol{\mu} \right)^{\rm T} \boldsymbol{\Sigma}^{-1} \left(\boldsymbol{x}-\boldsymbol{\mu}\right)


この距離が遠くなるほどガウス分布は指数的に減衰します。ユークリッド距離と比較します。

f:id:spd919:20220310230732p:plainf:id:spd919:20220310230737p:plain

 
\begin{align}
d^2=\left( \boldsymbol{x}-\boldsymbol{\mu} \right)^{\rm T} \left(\boldsymbol{x}-\boldsymbol{\mu}\right) & \qquad \qquad \qquad \qquad
\Delta^2=\left( \boldsymbol{x}-\boldsymbol{\mu} \right)^{\rm T} \boldsymbol{\Sigma}^{-1} \left(\boldsymbol{x}-\boldsymbol{\mu}\right)
\end{align}



マハラノビス距離は平均を中心に共分散行列の逆行列で等高線が歪んでいます。  p_1と平均 \boldsymbol{\mu}の位置は左のユークリッド距離と右のマハラノビス距離で同じ値ですが平均からの距離が異なります。

 
d(p_1)<\Delta(p_1)



おまけ

なお共分散行列の例の逆行列は上のマハラノビス距離の傾きと逆を取ります。

 
\boldsymbol{\Sigma}^{-1}=\begin{pmatrix}
1 & 0.8  \\
0.8 & 1 \\
\end{pmatrix}^{-1}=
\begin{pmatrix}
2.78 & -2.22  \\
-2.22 & 2.78 \\
\end{pmatrix}



PRMLでは共分散行列の逆行列を精度行列として定義し式変形を簡潔に表しています。

 
\Lambda \equiv \boldsymbol{\Sigma}^{-1}



参考文献

Pattern Recognition and Machine Learning