Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 包含字符串和数字的Ndarray上的Numpy操作_Python_R_Numpy_Multidimensional Array - Fatal编程技术网

Python 包含字符串和数字的Ndarray上的Numpy操作

Python 包含字符串和数字的Ndarray上的Numpy操作,python,r,numpy,multidimensional-array,Python,R,Numpy,Multidimensional Array,这是我关于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=",", dt

这是我关于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 + subData
#TypeError: unsupported operand type(s) for +: 'numpy.ndarray' and 'numpy.ndarray'
我提出的唯一解决方案不是非常优雅或实用,因为我往往会丢失列名和类型以及原始形状:

subData.view(int) + 1

提前非常感谢。

请详细说明我的评论,结构化数组并不是用于此目的的。它们是类C结构的数组。它们可以用来容纳不同类型的列,但很快就会变得很麻烦。它们在某些方面非常有用,但“类似电子表格”的数据不在其中。通常,当每列具有不同类型时,您只需将其存储为自己的数组。(这基本上就是熊猫所做的。)

这是因为结构化数组不是列具有不同类型的数组,而是每个项都是具有不同类型的序列的数组

如果确实希望将除第一列以外的所有列转换为“普通”二维数组,则可以执行以下操作:

numeric_data = np.c_[[data[col] for col in data.dtype.names[1:]]]
但是,如果ror数据中的每一列都是不同的类型,则最好使用
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

值得一提的是,numpy的结构化阵列并不是真正用于这种类型的东西。它们是类似C结构的数组,而不是“类似电子表格”的数据。处理它的典型方法是将每列保存在单独的数组中<不过,代码>熊猫是一个更好的选择。这是为“类似电子表格”的数据设计的。谢谢乔。实际上,我是在尽量避免不得不求助于熊猫。所以我更喜欢第一种选择:)我仍然觉得很奇怪,我不能做这么简单的事情。如果不是这样,结构化数组意味着什么?
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