当前位置: 首页 > 面试题库 >

将不同的数据类型存储在一个NumPy数组中?

扶珂
2023-03-14
问题内容

我有两个不同的数组,一个带有字符串,另一个带有整数。我想将它们连接成一个数组,其中每一列都具有原始数据类型。我当前执行此操作的解决方案(请参见下文)将整个数组转换为dtype
= string,这似乎在内存方面效率很低。

combined_array = np.concatenate((A, B), axis = 1)

combined_array何时A.dtype = string和何时可能使dtypes多元化B.dtype = int


问题答案:

一种方法可能是使用记录数组。“列”与标准numpy数组的列不同,但是对于大多数用例来说,这就足够了:

>>> a = numpy.array(['a', 'b', 'c', 'd', 'e'])
>>> b = numpy.arange(5)
>>> records = numpy.rec.fromarrays((a, b), names=('keys', 'data'))
>>> records
rec.array([('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4)], 
      dtype=[('keys', '|S1'), ('data', '<i8')])
>>> records['keys']
rec.array(['a', 'b', 'c', 'd', 'e'], 
      dtype='|S1')
>>> records['data']
array([0, 1, 2, 3, 4])

请注意,您还可以通过指定数组的数据类型来对标准数组执行类似的操作。这被称为“结构化数组”:

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

区别在于记录数组还允许对单个数据字段的属性访问。标准结构化数组则没有。

>>> records.keys
chararray(['a', 'b', 'c', 'd', 'e'], 
      dtype='|S1')
>>> arr.keys
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'keys'


 类似资料:
  • 问题内容: 说我有以下numpy结构化数组: 我想 将其保存到文本文件中的单个空格或制表符分隔的行中 。如果数组都是相同的类型,我可以使用。但是,这似乎不喜欢混合数据类型/结构化数组,例如: 给出此错误: 任何人都可以推荐这样做的方法吗? 问题答案: 编辑 :无论出于什么原因,我似乎都无法单独回答这个问题,因此这是一个更清洁的版本,它不需要使用模块。记录下来,@ askewchan的答案还是更好!

  • 我有一个这样的 txt 文件 163钱滴24 454快乐112 45 没有你什么都没有 56 第一个数字是歌曲的id,我想将其存储为整数,第二个数字是字符串!这不是一个词!第三个是整数,它是歌曲的点赞数。我想将它们存储在一个数组中,但当我使用scanner方法时,我会逐字存储它们,当歌曲有名字时 有什么方法可以读取 txt 文件,将第一个数字存储为 int,然后扫描整个字符串(歌曲名称),直到下一

  • 问题内容: 说我有一个包含以下内容的文件: 如何将数据作为整数,浮点数和字符串从文件导入到numpy数组中? 我的目标是: 我一直在玩以下无济于事: 编辑:另一种方法可能是使用ndarray类型,然后进行转换。 问题答案: 用途:

  • 问题内容: 我想将元素存储在一个列表中,每个元素具有4个参数,我试图创建一个数组列表,该列表为每个元素存储4个参数,它们是不同类型的: iD:int x位置:浮点 y位置:浮点 名称:字符串 我用: 但是当我使用时: 我得到错误: “ ArrayList类型的add(int,Object)方法不适用于参数(in,float,float)” 我不知道如何能够向ArrayList添加不同类型,有没有办

  • 问题内容: 在此先感谢您的帮助。 好吧,这就是我的情况。我有一个Web系统,该系统基于超声波计创建的样本进行一些与噪声相关的计算。最初,数据库仅存储这些计算的结果。但是现在,我被要求也自己存储样本。每个样本只是一个300或600个数字的列表,每个数字都有一个小数。 因此,我想到的最简单的方法是在表中添加一列,该列存储给定样本的所有计算。此列应包含数字列表。 那么我的问题是:将这一数字列表存储在单列

  • 问题内容: 假设我必须创建一个存储ArrayList的Integers数组,并且数组大小为10。 下面的代码可以做到这一点: 问题1: 我认为更合适的代码是 为什么这不起作用? 问题2: 下面两个都编译 有什么区别尽可能的引用声明和关注? 问题答案: 问题1: 基本上,这是Java语言禁止的。Java语言规范中的泛型部分对此进行了介绍。 使用时 您会收到编译器警告,因为以下示例将进行编译(为每行代