Help us understand the problem. What is going on with this article?

[NumPy基礎] 1次元配列 ⇔ 多次元配列

1次元配列 → 多次元配列

reshape()メソッドを用いて各次元の要素数を指定することにより、1次元配列を任意の次元の配列に変換できます。配列の構造が分かっていない場合は、事前にshapeプロパティを用いて各次元の要素数を確認すれば良いでしょう。
以下の例では、$\begin{bmatrix}
1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 \
\end{bmatrix}$ を $\begin{bmatrix}
1 & 2 & 3 & 4 \\
5 & 6 & 7 & 8 \
\end{bmatrix}$ に変換しています。

import numpy as np

data_1 = np.array([1,2,3,4,5,6,7,8])
print(data_1)
print(data_1.shape)

data_2 = data_1.reshape(2, 4)
print(data_2)

最初から $\begin{bmatrix}
1 & 2 & 3 & 4 \\
5 & 6 & 7 & 8 \
\end{bmatrix}$ を作りたいのであれば、以下のとおり1行で作ることもできます。

data = np.array([1,2,3,4,5,6,7,8]).reshape(2,4)
print(data)

多次元配列 → 1次元配列

多次元配列を1次元配列に変換したい場合はいくつか方法があります。

ravel() と flatten()

ravel() と flatten()はいずれも配列を1次元に平滑化(flatten)します。
flatten()を用いた場合は、新しくメモリを使用して配列を新規作成して返り値とします。そのため、返り値の配列の要素を更新した場合も、元の配列の要素は変わりません。
ravel()を用いた場合は、元の配列の形状を直接変更するため、処理速度が速いです。しかし元の配列の要素をそのまま残すことはできません。

data = np.array([[1,2,3,4],[5,6,7,8]])
print(data.ravel())
print(data.flatten())

reshape()

勿論、reshape()を用いることもできます。

data = np.array([[1,2,3,4],[5,6,7,8]])
print(data.reshape(-1))

-1を使うと、指定した要素数以外は勝手に調節した配列に整形されます。以下では、4行2列の行列に整形しています。

data = np.array([[1,2,3,4],[5,6,7,8]])
print(data.reshape(4,-1))

多次元配列への応用

上記の方法を用いると、$(a, b, c, d)$ の形状の4次元配列 $X$ について、$(b*c*d, a)$ の形状に変更したい場合、以下のような方法で変更できます。

X = X.reshape(X.shape[0], -1).T  # X.T: the transpose of X
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away