连接具有多种数据类型的数组
在处理不同类型的数据时,通常需要将它们组合成一个数组。无需将整个数组转换为单一数据类型即可高效完成此操作。
考虑以下场景:您有两个数组,A 包含字符串,B 包含整数。目标是创建一个组合数组combined_array,其中每列保留其原始数据类型。
使用 np.concatenate 连接 A 和 B 时,会出现combined_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中文网其他相关文章!