0

陷入这个 Numpy 问题

country=['India','USA']
​gdp=[22,33]

import numpy as np
a=np.column_stack((country,gdp))

array([['India', '22'],
       ['USA', '33']], dtype='<U11')

我有一个 NDArray,我想找到第二列的最大值。我尝试了以下

print(a.max(axis=1)[1])
print(a[:,1].max())

它抛出了这个错误:TypeError: cannot perform reduce with flexible type

尝试转换类型

datatype=([('country',np.str_,64),('gross',np.float32)])

new=np.array(a,dtype=datatype)

但得到以下错误

无法将字符串转换为浮点数:“印度”。

4

2 回答 2

1

该错误是由于数组中的字符串数据导致的,这使得 dtype 为 Unicode(由 U11 表示,即 11 个字符的 unicode)字符串。如果您希望以数字格式存储数据,请使用structured arrays. 但是,如果您只想计算数值列的最大值,请使用

print(a[:, 1].astype(np.int).max())
// 33

您可以根据特定列中数据的性质选择使用其他数字 dtypes,例如 inplace np.floatof 。np.int

于 2018-03-19T10:00:24.427 回答
-1

考虑numpy对混合类型使用结构化数组。如果您明确设置数据类型,则不会有任何问题。

这通常是必要的,当然也是可取的,对于numpy.

import numpy as np

country = ['India','USA','UK']
gdp = [22,33,4]

a = np.array(list(zip(country, gdp)),
             dtype=[('Country', '|S11'), ('Number', '<i8')])

res_asc = np.sort(a, order='Number')

# array([(b'UK', 4), (b'India', 22), (b'USA', 33)], 
#       dtype=[('Country', 'S11'), ('Number', '<i8')])

res_desc = np.sort(a, order='Number')[::-1]

# array([(b'USA', 33), (b'India', 22), (b'UK', 4)], 
#       dtype=[('Country', 'S11'), ('Number', '<i8')])
于 2018-03-19T10:12:17.460 回答