#インデックスがタプルになっている配列を見つけた
機械学習を始めた初期のころに非常に困らされた割には当時Webで調べても答えが見つからなかったので共有します。
Pythonの標準機能であるリストでは
list
>>> list = [1,2,3,4]
>>> print(list)
[1, 2, 3, 4]
#リストをそのまま表示
>>> print(list[2])
3
#リストの3番目の要素を表示
となります。当たり前ですね。二次元配列にしたい場合は
two_dimensional_list
>>> list_list = [[1,2],[3,4],[5,6]]
#二次元配列の作成
>>> print(list_list)
[[1, 2], [3, 4], [5, 6]]
>>> print[0][1]
2
#一番目のリストの二つ目の要素を表示
となるでしょう。ここで注目していただきたいのが、
print[0][1]
の部分です。最初のリストの最初の要素ですから記法は当然こうなります。添え字の部分に
[0,1]
とするのは間違いだと思っていました。
しかしある日、実際にlist[0,1]という形式で配列内部の要素を抽出しているのを見つけてしまったのです。
##犯人はNumpyのnumpy.arrayだった
上述の通り、
list_list = [[1,2],[3,4],[5,6]]
の"2"を表示するためには
print(list_list[0][1])
と書く必要があります。
print[0,1]
と書こうものなら
Error
>>> print(list_list[0,1])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers or slices, not tuple
```
というエラーが返ってきます。
"リストの添え字は整数だよ。タプルで渡されても困るよ。"という意味ですね。
<b>しかし、Numpy配列ではデフォルトで添え字にタプルが渡せるのです。</b>以下に例を示します。
```python3:numpy_array
>>> import numpy as np
>>> array = np.array([[1,2],[3,4],[5,6]])
>>> print(array[0][1]) #python標準の表記で2を取り出す
2
>>> print[0,1] #添え字にタプルを渡しても指定できる
2
```
numpy arrayの仕様だったとは....どなたかの役に立てば幸いです。