我正在使用名为numpy
的{{1}}数组。我正在玩下面的代码:
predictions
输出结果为:
print type(predictions)
print list(predictions)
我想知道<type 'numpy.ndarray'>`
[u'yes', u'no', u'yes', u'yes', u'yes']
如何设法建立他们的numpy
类,以便它可以转换为不使用自己的ndarray
函数的列表,而是使用标准的Python函数。
Python版本:2.7,Numpy版本:1.9.2
答案 0 :(得分:2)
我从下面的纯Python角度回答,但是
numpy
数组实际上是用C实现的 - 参见例如thearray_iter
function
documentation将list
的参数定义为iterable
; new_list = list(something)
有点像:
new_list = []
for element in something:
new_list.append(element)
(或者,在列表理解中:new_list = [element for element in something]
)。因此,要为自定义类实现此行为,您需要定义__iter__
magic method:
>>> class Demo(object):
def __iter__(self):
return iter((1, 2, 3))
>>> list(Demo())
[1, 2, 3]
答案 1 :(得分:2)
正如其他人所写,list()
有效,因为数组是可迭代的。它相当于[i for i in arr]
。要理解它,您需要了解数组的迭代是如何工作的。特别是,list(arr)
与arr.tolist()
不同。
In [685]: arr=np.array('one two three four'.split())
In [686]: arr
Out[686]:
array(['one', 'two', 'three', 'four'],
dtype='<U5')
In [687]: ll=list(arr)
In [688]: ll
Out[688]: ['one', 'two', 'three', 'four']
In [689]: type(ll[0])
Out[689]: numpy.str_
In [690]: ll1=arr.tolist()
In [691]: ll1
Out[691]: ['one', 'two', 'three', 'four']
In [692]: type(ll1[0])
Out[692]: str
ll
和ll1
的打印显示看起来相同,但元素的type
不同,一个是str
,另一个是{{1包含在str
类中。最近关于序列化数组的问题出现了这种区别。
当numpy
为2d时,区别变得更加明显。然后简单的交互产生行,而不是元素:
arr
In [693]: arr=np.reshape(arr,(2,2))
In [694]: arr
Out[694]:
array([['one', 'two'],
['three', 'four']],
dtype='<U5')
In [695]: list(arr)
Out[695]:
[array(['one', 'two'],
dtype='<U5'), array(['three', 'four'],
dtype='<U5')]
In [696]: arr.tolist()
Out[696]: [['one', 'two'], ['three', 'four']]
现在是两个数组,而list(arr)
是嵌套列表。
Python Pandas: use native types
Why does json.dumps(list(np.arange(5))) fail while json.dumps(np.arange(5).tolist()) works