0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python: 超立方体の展開

Posted at

はじめに

超立方体は単なる2進数だった。この話は以下の記事で行っているので、この知識を前提に超立方体を展開していく。

python: 超立方体

準備

まずは準備

import random
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def extension(dim):
    """ 次元を拡張する関数

    :param dim: 拡張する次元の配列
    :returns: 拡張された配列
    """
    return np.concatenate([np.array(dim) - 1, np.array(dim) + 1]).tolist()


dot = [[0], [0], [0], [0]]

直線

そしてこれが点から直線(1次元)への拡張だった。直線の数はわかりやすく 0 -> 1 の変化の数である(1 -> 0 も直線だが重複を許すことになるので、この変化は無視する)。当然のことで、以下の直線は1つである。

line = [extension(dot[0]), dot[1]*2, dot[2]*2, dot[3]*2]
for x, y, i in zip(line[0], line[1], range(len(line[0]))):
    plt.scatter([x], [y], marker="o", linestyle='None', label=str(i)+' : '+format(i, '0'+str(1)+'b'))
plt.legend()
plt.show()

直線.png

正方形

そしてこれが正方形(2次元)への拡張だった。

square = [line[0]*2, extension(line[1]), line[2]*2, line[3]*2]
for x, y, i in zip(square[0], square[1], range(len(square[0]))):
    plt.scatter([x], [y], marker="o", linestyle='None', label=str(i)+' : '+format(i, '0'+str()+'b'))
plt.legend()
plt.show()

平面.png

ここから直線は何個取れるだろう。取り方は、1つの次元を固定して、残りの次元で 0 -> 1 の変化になっている個数を数えればよい。つまりは1次元目を 0(赤枠) or 1(青枠) に固定して得られる 2個 と

展開1.png

2次元目を 0(赤枠) or 1(青枠) に固定して得られる 2個 である。(赤枠、青枠はラベル内の枠の事…伝わりにくかったらごめんなさい)

展開2.png

そして平面は 00 -> 01 -> 10 -> 11 の変化である。

立方体

そしてこれが立方体への拡張だった。

cube = [square[0]*2, square[1]*2, extension(square[2]), square[3]*2]
fig = plt.figure()
fig = plt.figure(figsize=(10.0, 8.0))
Axes3D(fig)
for x, y, z, i in zip(cube[0], cube[1], cube[2], range(len(cube[0]))):
    plt.plot([x], [y], [z], marker="o", linestyle='None', label=str(i)+' : '+format(i, '0'+str(3)+'b'))
plt.legend()
plt.show()

対応関係.png

 ここから平面は何個取れるだろう。取り方は、1つの次元を固定して、残りの次元で 00 -> 01 -> 10 -> 11 の変化になっている個数を数えればよい。先ほどと同じように色分けしてもよいが、実は1次元目を 0 or 1 に固定して得られるのは2個であり、2次元目を固定しても2個、3次元目を固定しても2個である。つまり、平面が6個取れる。さらに言ってしまえば、何次元に拡張しても同じように取ることができ、つまりは N次元の超立方体 は N-1次元の超立方体 2N個 で構成されている。つまり、立方体から正八胞体に拡張すると、正八胞体は4次元の超立方体なので3次元の超立方体である立方体 2×4 = 8 個 で構成される。 可視化してもよいが、サイコロを展開しても分かるように、展開方法によって形状はまちまちになるためやめておこう(実際に展開した図はいっぱい転がってるしね)。

まとめ

これでよくある正八胞体を展開すると8個の立方体になるというのが納得できるかと思う。まぁそんなに難しくないってことですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?