【问题标题】:Casting Transformation to Column in Numpy Array将转换转换为 Numpy 数组中的列
【发布时间】:2021-05-01 05:31:57
【问题描述】:

我有一个如下所示的表格:

City Value
<String> <String>
Chicago 12
Detriot 15
Jersery City 20

此表以这种格式锁定:

import numpy as np
x = np.array([('Chicago', '12'),('Detriot', '15'),('Jersery City', '20')])

我对 Stack Overflow 进行了一些研究,并来到了这个帖子 here。但是我不知道为什么它不起作用。我尝试了以下代码:

x[:,1] = x[:,1].astype(int)

我什至也尝试了以下方法,但没有成功:

x[:,[1]] = x[:,[1]].astype(int)

但是,这一行在运行时会返回以下内容:

type(x[0,1])
numpy.str_

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    Numpy 数组仅支持统一类型。因此,数组的所有项都应该属于同一类型(您可以使用x.dtype 检索它),例如np.float64np.int64

    x 中的项目类型不能在运行时更改x[:,1] = x[:,1].astype(int) 执行隐式转换,以便类型匹配。如果需要,则必须创建一个新数组

    请注意,此类型可以是object。在这种情况下,任何 Python 对象都可以存储在 Numpy 数组中。但是,使用 object 类型通常不是一个好主意,因为它们在内存中的存储效率低下,会破坏任何可能的低级向量化(即慢)并导致并行性能问题(因为 GIL)。

    另请注意,Numpy 提供结构化类型以在每个数组项中存储(相当)复杂的数据结构。

    【讨论】:

    • 所以字符串取代了int?
    • 不是因为类型“取代”。这是由于 Numpy 在您的情况下所做的隐式转换。它根据静态数组类型规则进行转换(如果没有隐式转换,赋值将无效,因为赋值语句左右部分的类型不匹配)。
    猜你喜欢
    • 2017-03-08
    • 2015-01-07
    • 2019-08-30
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    相关资源
    最近更新 更多