どうも、ちょげ(@chogetarou)です。
配列(array)を2次元から1次元に変換する方法を紹介します。
リストの場合

2次元のリスト(List)を1次元に変換する方法は、5つあります。
sum()
1つ目は、sum()を使う方法です。
まず、sum()を呼び出します。
そして、sum()の第1引数に2次元のリスト、第2引数に「[]」を指定します。
#ls=対象のリスト
new_ls = sum(nums, [])
上記のsum()は、2次元のリストを1次元に変換した結果を返します。
使用例
nums = [[1, 2, 3], [4, 5, 6]]
new_nums = sum(nums, [])
print(new_nums)
出力:
[1, 2, 3, 4, 5, 6]
内包表記
2つ目は、内包表記を使う方法です。
まず、[]を記述します。
[]内で、2次元のリストをfor文でループします。
for文のループ変数を、for文でループします。
そして、2つ目のfor文のループ変数を、内包表記の結果として返します。
#ls=対象のリスト
new_ls = [x for row in ls for x in row]
上記の内包表記は、2次元のリストを1次元に変換したリストを返します。
使用例
nums = [[1, 2, 3], [4, 5, 6]]
new_nums = [x for row in nums for x in row]
print(new_nums)
出力:
[1, 2, 3, 4, 5, 6]
extend()
3つ目は、extend()を使う方法です。
まず、空のリストを用意します。
次に、for文で2次元のリストをループします。
そして、ループ処理で、空のリストからextend()を呼び出します。
extend()の引数にループ変数を指定します。
#ls=対象のリスト
new_ls = []
for row in ls:
new_ls.extend(row)
上記のfor文は、2次元のリストを1次元に変換した結果を用意した空のリストに格納します。
使用例
nums = [[1, 2, 3], [4, 5, 6]]
new_nums = []
for row in nums:
new_nums.extend(row)
print(new_nums)
出力:
[1, 2, 3, 4, 5, 6]
reduce()
4つ目は、reduce()を使う方法です。
まず、reduce()をインポートします。
from functools import reduce
次に、reduce()を呼び出します。
そして、reduce()の第1引数に2つの引数を持つラムダ式、第2引数にリストを指定します。
ラムダ式で、2つの引数を足した結果を返します。
#ls=対象のリスト
new_ls = reduce(lambda a, b: a + b, ls)
上記のreduce()は、2次元のリストを1次元に変換したリストを返します。
使用例
from functools import reduce
nums = [[1, 2, 3], [4, 5, 6]]
new_nums = reduce(lambda a, b: a + b, nums)
print(new_nums)
出力:
[1, 2, 3, 4, 5, 6]
itertools
5つ目は、itertoolsを使う方法です。
まず、itertoolsをインポートします。
import itertools
次に、list()を呼び出します。
list()の引数で、itertoolsからchain、chainからfrom_iterable()を呼び出します。
そして、 from_iterable()の引数に、対象のリストを指定します。
#ls=対象のリスト
new_ls = list(itertools.chain.from_iterable(ls))
上記のlist()は、2次元のリストを1次元に変換した結果を返します。
使用例
import itertools
nums = [[1, 2, 3], [4, 5, 6]]
new_nums = list(itertools.chain.from_iterable(nums))
print(new_nums)
出力:
[1, 2, 3, 4, 5, 6]
Numpy配列の場合

Numpy配列(array)を2次元から1次元に変換する方法は、3つあります。
ravel()
1つ目は、ravel()を使う方法です。
「arr.ravel()
」のように、対象のNumpy配列からravel()を呼び出します。
#arr=対象のNumpy配列
result = arr.ravel()
上記のravel()は、2次元の配列を1次元に変換したNumpy配列を取得します。
使用例
import numpy as np
nums = np.array([[1, 2, 3], [4, 5, 6]])
result = nums.ravel()
print(result)
出力:
[1, 2, 3, 4, 5, 6]
flatten()
2つ目は、flatten()を使う方法です。
「arr.flatten()
」のように、対象のNumpy配列からflatten()を呼び出します。
#arr=対象のNumpy配列
result = arr.flatten()
上記のflatten()は、2次元の配列を1次元に変換したNumpy配列を取得します。
使用例
import numpy as np
nums = np.array([[1, 2, 3], [4, 5, 6]])
result = nums.flatten()
print(result)
出力:
[1, 2, 3, 4, 5, 6]
reshape()
3つ目は、reshape()を使う方法です。
まず、Numpy配列からreshape()を呼び出します。
そして、reshape()の引数に「-1」を指定します。
#arr=対象のNumpy配列
result = arr.reshape(-1)
上記のreshape()は、2次元の配列を1次元に変換したNumpy配列を取得します。
使用例
import numpy as np
nums = np.array([[1, 2, 3], [4, 5, 6]])
result = nums.reshape(-1)
print(result)
出力:
[1, 2, 3, 4, 5, 6]
まとめ
2次元のリスト(List)を1次元に変換する方法は、次の5つです。
- sum()を使う方法
new_ls = sum(nums, [])
- 内包表記を使う方法
new_ls = [x for row in ls for x in row]
- extend()を使う方法
- reduce()を使う方法
new_ls = reduce(lambda a, b: a + b, ls)
- itertoolsを使う方法
new_ls = list(itertools.chain.from_iterable(ls))
Numpy配列(array)を2次元から1次元に変換する方法は、次の3つです。
- ravel()を使う方法
result = arr.ravel()
- flatten()を使う方法
result = arr.flatten()
- reshape()を使う方法
result = arr.reshape(-1)
コメント