[Python]配列を2次元から1次元に変換するには?

python

どうも、ちょげ(@chogetarou)です。

配列(array)を2次元から1次元に変換する方法を紹介します。

スポンサーリンク

リストの場合

インターフェース, インターネット, プログラム, ブラウザ, Www

2次元のリスト(List)を1次元に変換する方法は、5つあります。

sum()

1つ目は、sum()を使う方法です。

まず、sum()を呼び出します。

そして、sum()の第1引数に2次元のリスト、第2引数に「[]」を指定します。

#ls=対象のリスト
new_ls = sum(nums, [])

上記のsum()は、2次元のリストを1次元に変換した結果を返します。

上記のsum()では、合計値の初期値として空のリストを指定しています。

sum()は、初期値にリストの全ての要素を足していきます。

結果、sum()は、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)

コメント

タイトルとURLをコピーしました