gpt4 book ai didi

python - 对包含字符串和数字的 ndarray 进行 Numpy 运算

转载 作者:太空宇宙 更新时间:2023-11-03 18:35:30 24 4
gpt4 key购买 nike

这是我在 stackoverflow 上的第一个问题。到目前为止,我所有的问题都已经被问到了,但即使经过大量研究,我也找不到这个问题的答案。所以这里是:

我想在我为其转换了数据类型的 numpy 数组中进行数学运算。这在 R 中很简单,但在 Python 中却很复杂。

import numpy as np
from StringIO import StringIO
test = "a,1,2\nb,3,4"
data = np.genfromtxt(StringIO(test), delimiter=",", dtype=None)

这给了我:

print data
#array([('a', 1, 2), ('b', 3, 4)],
# dtype=[('f0', '|S1'), ('f1', '<i8'), ('f2', '<i8')])

但是如果我尝试对数据的数字子集执行任何数学运算,我会收到错误消息:

subData = data[['f1','f2']]
print subData
# [(1, 2) (3, 4)]
subData+1
#TypeError: unsupported operand type(s) for +: 'numpy.ndarray' and 'int'

甚至:

subData + subData
#TypeError: unsupported operand type(s) for +: 'numpy.ndarray' and 'numpy.ndarray'

我想出的唯一解决方案不是一个非常优雅或实用的解决方案,因为我往往会丢失列名称和类型以及原始形状:

subData.view(int) + 1

提前非常感谢。

最佳答案

只是为了详细说明我的评论,结构化数组并不完全适用于此。它们是类似 C 结构的数组。它们可以用来容纳不同类型的色谱柱,但很快就会变得很麻烦。它们对于某些事情非常有用,但“类似电子表格”的数据不是其中之一。通常,当每一列具有不同的类型时,您只需将它们存储为自己的数组。 (这本质上就是pandas所做的。)

这是因为结构化数组不是列具有不同类型的数组,它们是每个项目是具有不同类型的序列的数组。

如果您确实想将除第一列之外的所有列转换为“正常”二维数组,您可以执行以下操作:

numeric_data = np.c_[[data[col] for col in data.dtype.names[1:]]]

但是,对于每列都是不同类型的数据,最好使用 pandas。它适用于类似电子表格的数据。

from StringIO import StringIO
import pandas as pd

test = "a,1,2\nb,3,4"
data = pd.read_csv(StringIO(test), header=None)

print data[[1,2]] + 5

关于python - 对包含字符串和数字的 ndarray 进行 Numpy 运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21661308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com