Python 具有多个数据类型的Numpy数组格式不正确

Python 具有多个数据类型的Numpy数组格式不正确,python,python-3.x,numpy,Python,Python 3.x,Numpy,也许这是一个愚蠢的问题,但我以前从未见过这种行为,我不确定谷歌的正确术语 如果以这种方式加载阵列: A= np.loadtxt(csv,dtype='a100') 我得到了这种格式的东西(它是一个2D数组)。我习惯了这种格式,因为我知道它很快,而且我知道如何通过行和列轻松找到元素的索引 [[a,1],[b,2]] 然而,因为我的数组既有字符串也有浮点数,所以当我在中加载数组时,会得到不同的结果 A= np.loadtxt(csv,dtype='a100,float') 结果:[(a,1)、

也许这是一个愚蠢的问题,但我以前从未见过这种行为,我不确定谷歌的正确术语

如果以这种方式加载阵列:

A= np.loadtxt(csv,dtype='a100')
我得到了这种格式的东西(它是一个2D数组)。我习惯了这种格式,因为我知道它很快,而且我知道如何通过行和列轻松找到元素的索引

[[a,1],[b,2]]
然而,因为我的数组既有字符串也有浮点数,所以当我在中加载数组时,会得到不同的结果

A= np.loadtxt(csv,dtype='a100,float')
结果:
[(a,1)、(b,2)]

我的目标是能够基于第一列中的字符串快速搜索数组,然后对第二列执行数字操作

是否最好将它保存在一个数据类型中,这样可以为我提供索引[[]],然后以某种方式将该字符串转换为浮点以执行数字操作,然后将其写回

我是否仍然可以使用组合的数据类型执行所有相同的搜索和索引,同时保持numpy的速度

我是不是完全陷入了困境


感谢您的输入。

numpy
darray必须是同质的(也就是说,所有元素必须具有相同的数据类型)。由于loadtxt()查找不同的值类型,因此它假定您需要复杂数据类型的向量,而不是二维数组。

您可以继续使用生成的结构化数据类型。例如:

$ cat data.csv
a 1
b 3 
c 4
d 5
e 0
f 8
您可以根据第一列中的值对第二列执行操作:

>>> data = np.loadtxt('data.csv', dtype='a100,int')
>>> data.dtype
dtype([('f0', 'S100'), ('f1', '<i8')])
>>> data.dtype.names
('f0', 'f1')

这些结构化数组的工作原理与您习惯使用的典型n维数组类似,但它们是同质的(即所有元素都是同一类型的),但您不能将数字索引分组在同一组方括号内(因此没有
数据[:3,'f1']
,但是
数据[:3]['f1']
数据['f1'][:3]
是可以的).

我明白了,那么我可以将在同质数组中找到的东西转换成一个数字,执行该操作,然后将其写回字符串吗?你知道我可以在谷歌上搜索更多信息吗?你可能需要更仔细地考虑你的需求。查看以了解有关字段访问的更多信息。我不会考虑将数字存储为字符串并转换它们。这将是非常低效的。那么你有什么建议吗?具有两种不同数据类型的两个不同阵列?我需要一种快速的方法来搜索和索引相当大的数组。可以处理不同数据类型的列,所以你可以考虑如果Oliver W的建议不能满足你的需求。
>>> def some_processing(arr):  # example function to simulate some processing
...     return (arr < 'e') & (arr > 'b')
...
>>> data['f1'][some_processing(data['f0'])]
array([4, 5])