我不知道为什么我总是在numpy.Maybe的简单事情上出错,我只是想起了一些错误,用键和值创建数组的最好方法是什么?
我试过了:
group_a = np.array[{"russia" : 0}, {"saudi_arabia" : 0}, {"egypt" : 0}, "uruguay" : 0}]
TypeError:“builtin_function_or_method”对象不可订阅
&
group_a = np.array({"russia" : 0}, {"saudi_arabia" : 0}, {"egypt" : 0}, "uruguay" : 0})
ValueError:只接受2个非关键字参数
&
我觉得很困惑。
发布于 2018-06-13 05:17:29
首先是np.array
的签名
array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
它是一个函数,使用()
。它需要一个位置参数,通常是一个列表。其他参数被解释为关键字参数、dtype
、copy
等。
我们可以做一个字典列表:
In [543]: alist = [{"russia" : 0}, {"saudi_arabia" : 0}, {"egypt" : 0}, {"urugua
...: y" : 0}]
In [544]: alist
Out[544]: [{'russia': 0}, {'saudi_arabia': 0}, {'egypt': 0}, {'uruguay': 0}]
我们可以从这个列表中生成一个数组。请注意dtype
。该数组是一维的。
In [545]: arr = np.array(alist)
In [546]: arr
Out[546]:
array([{'russia': 0}, {'saudi_arabia': 0}, {'egypt': 0}, {'uruguay': 0}],
dtype=object)
但是你为什么不做一个有多个键的字典呢?单元素字典的列表或数组看起来不是很有用。
In [548]: adict = {"russia" : 0, "saudi_arabia" : 0, "egypt" : 0,"uruguay" : 0}
In [549]: adict
Out[549]: {'russia': 0, 'saudi_arabia': 0, 'egypt': 0, 'uruguay': 0}
比较获取字典关键字的方法:
In [550]: alist[2].keys()
Out[550]: dict_keys(['egypt'])
In [551]: adict.keys()
Out[551]: dict_keys(['russia', 'saudi_arabia', 'egypt', 'uruguay'])
In [552]: [d.keys() for d in arr]
Out[552]:
[dict_keys(['russia']),
dict_keys(['saudi_arabia']),
dict_keys(['egypt']),
dict_keys(['uruguay'])]
In [554]: np.array([list(d.items()) for d in alist],object)
Out[554]:
array([[['russia', 0]],
[['saudi_arabia', 0]],
[['egypt', 0]],
[['uruguay', 0]]], dtype=object)
In [555]: _.shape
Out[555]: (4, 1, 2) # multidimensional object array
In [556]: __[:,0,0]
Out[556]: array(['russia', 'saudi_arabia', 'egypt', 'uruguay'], dtype=object)
我们还可以从adict
(但也可以间接从alist
)创建一个结构化数组:
In [559]: list(adict.items()) # produces a list of tuples
Out[559]: [('russia', 0), ('saudi_arabia', 0), ('egypt', 0), ('uruguay', 0)]
In [561]: sarr = np.array(list(adict.items()),dtype='U20,int')
In [562]: sarr
Out[562]:
array([('russia', 0), ('saudi_arabia', 0), ('egypt', 0), ('uruguay', 0)],
dtype=[('f0', '<U20'), ('f1', '<i8')])
按字段访问。(请注意,这是一个一维数组):
In [563]: sarr['f0']
Out[563]: array(['russia', 'saudi_arabia', 'egypt', 'uruguay'], dtype='<U20')
In [564]: sarr['f1']
Out[564]: array([0, 0, 0, 0])
发布于 2018-06-13 04:45:57
np.array
是一个函数,因此您不能使用[]
订阅它。在第二种情况下,您输入的字典列表是错误的,您应该创建一个字典列表,然后将其传递给第一个参数。现在,您正在将一个字典作为函数的参数进行传递。因此,这应该是可行的:
np.array([{"russia" : 0}, {"saudi_arabia" : 0}, {"egypt" : 0}, {"uruguay" : 0}])
https://stackoverflow.com/questions/50825520
复制相似问题