カタン、Pythonでは?―― リストの場合

numpyの3次元配列で要素を追加していく手段で、すっきりしたやり方がすぐにわからなかったので、リストならばどうか、見てみる。 といっても、CSVファイルをリストの形で読み込む方法は、もちろんあるのだが、これはこれで面倒くさい。また二つのリストの要素同士の足し算も難しそうなので、途中までは配列で行く。

で、やってみたのがこれ。

import numpy as np

t1 = np.loadtxt(fname='dataC2.csv', dtype=float, delimiter=",", skiprows=1)

t3 = np.array([[[0, 0], [-17.32, 10.00], [-17.32, 30.00], [0.00, 40.00],[17.32, 30.00],[17.32, 10.00]]])

t4 = [ ]

for t0b in t1: t0c = t0b + t3 t0d = t0c.tolist() t4.append(t0d)

print(t4)

その結果。

[[[[217.32, 200.0], [200.0, 210.0], [200.0, 230.0], [217.32, 240.0], [234.64, 230.0], [234.64, 210.0]]], [[[251.96, 200.0], [234.64000000000001, 210.0], [234.64000000000001, 230.0], [251.96, 240.0], [269.28000000000003, 230.0], [269.28000000000003, 210.0]]], [[[286.6, 200.0], [269.28000000000003, 210.0], [269.28000000000003, 230.0], [286.6, 240.0],

途中省略

[286.59999999999997, 320.0], [286.59999999999997, 300.0]]], [[[303.92, 290.0], [286.6, 300.0], [286.6, 320.0], [303.92, 330.0], [321.24, 320.0], [321.24, 300.0]]], [[[217.32, 320.0], [200.0, 330.0], [200.0, 350.0], [217.32, 360.0], [234.64, 350.0], [234.64, 330.0]]], [[[251.96, 320.0], [234.64000000000001, 330.0], [234.64000000000001, 350.0], [251.96, 360.0], [269.28000000000003, 350.0], [269.28000000000003, 330.0]]], [[[286.6, 320.0], [269.28000000000003, 330.0], [269.28000000000003, 350.0], [286.6, 360.0], [303.92, 350.0], [303.92, 330.0]]]]

かなり、「何だこれは?」感がある。そもそも、234.64000000000001ってなんだ?Windowsのバグってやつか?困ったもんだ。 これはリストのまま。numpy配列にするには、 t4 = np.array(t4) を加える。 その結果。

[[[[217.32 200. ] [200. 210. ] [200. 230. ] [217.32 240. ] [234.64 230. ] [234.64 210. ]]]

[[[251.96 200. ] [234.64 210. ] [234.64 230. ] [251.96 240. ] [269.28 230. ] [269.28 210. ]]]

途中省略

[[[251.96 320. ] [234.64 330. ] [234.64 350. ] [251.96 360. ] [269.28 350. ] [269.28 330. ]]]

[[[286.6 320. ] [269.28 330. ] [269.28 350. ] [286.6 360. ] [303.92 350. ] [303.92 330. ]]]]

うん、うまく行ったぞ。では、描画しよう、と正六角形を描く部分を付け足して実行すると、エラーがでる。なんでだ?と見直すと、t4がなぜか4次元になってる。1次元の空リストの要素として3次元リストを加えていったため、4次元になったらしい。じゃあどうすればいいか? 3次元で作ったt3を2次元にしておけばいいか。やってみたら、うまく行った。修正版が以下のコード。t3が2次元になってるだけが違い。

import numpy as np

import pygame

t1 = np.loadtxt(fname='dataC2.csv', dtype=float, delimiter=",", skiprows=1)

t3 = np.array([[0, 0], [-17.32, 10.00], [-17.32, 30.00], [0.00, 40.00],[17.32, 30.00],[17.32, 10.00]])

t4 = [ ]

for t0b in t1: t0c = t0b + t3 t0d = t0c.tolist() t4.append(t0d)

t4 = np.array(t4)

print(t4)

まずはめでたし。