ホームページ  >  記事  >  バックエンド開発  >  異なるデータ型の配列を連結してメモリ効率を維持するにはどうすればよいですか?

異なるデータ型の配列を連結してメモリ効率を維持するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-21 17:56:03594ブラウズ

How to Concatenate Arrays with Different Datatypes and Maintain Memory Efficiency?

複数のデータ型の配列の連結

異なる型のデータを扱う場合、多くの場合、それらを 1 つの配列に結合する必要があります。これは、配列全体を単一のデータ型に変換しなくても効率的に実行できます。

次のシナリオを考えてみましょう。文字列を含む配列 A と整数を含む配列 B の 2 つの配列があります。目標は、各列が元のデータ型を保持する結合配列 combined_array を作成することです。

np.concatenate を使用して A と B を連結すると、combine_array = np.concatenate((A, B), axis = 1) が表示されます。簡単に言えば、デフォルトで配列全体が dtype=string に変換されるため、メモリ効率が低下します。

解決策: レコード配列と構造化配列

効果的なアプローチは、レコード配列または構造化配列。

レコード配列:

レコード配列は、複数のデータ型を単一の配列に格納する柔軟な方法を提供します。個々のフィールドには属性を通じてアクセスできます:

import numpy as np

a = np.array(['a', 'b', 'c', 'd', 'e'])
b = np.arange(5)
records = np.rec.fromarrays((a, b), names=('keys', 'data'))

print(records)
# rec.array([('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4)], 
#   dtype=[('keys', '|S1'), ('data', '<i8')])
print(records['keys'])
# rec.array(['a', 'b', 'c', 'd', 'e'], 
#   dtype='|S1')
print(records['data'])
# array([0, 1, 2, 3, 4])

構造化配列:

レコード配列と同様に、構造化配列では各フィールドのデータ型を指定できます。 :

arr = np.array([('a', 0), ('b', 1)], 
                dtype=([('keys', '|S1'), ('data', 'i8')]))

print(arr)
# array([('a', 0), ('b', 1)], 
#   dtype=[('keys', '|S1'), ('data', '<i8')])

レコード配列は属性アクセスを提供しますが、構造化配列は提供しないことに注意してください。

以上が異なるデータ型の配列を連結してメモリ効率を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。