为什么np.array转换为数组列表及其元素?

时间:2019-12-18 18:04:24

标签: python numpy

我是Python的新手,在这段代码中我有些不了解:

import numpy as np

a_list = []
sub_list = ["apple", "banana", "cherry"]

a_list.append(sub_list)

print(type(a_list))
print(type(a_list[0]))
print(type(sub_list))

array = np.array(a_list)

print(type(array))
print(type(array[0]))
print(type(sub_list))
print(array[0])

运行它时,得到以下输出:

<class 'list'>
<class 'list'>
<class 'list'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'list'>
['apple' 'banana' 'cherry']

为什么type(array[0])也是numpy.ndarray?不应该是清单吗?

1 个答案:

答案 0 :(得分:1)

In [36]:  
    ...: a_list = [] 
    ...: sub_list = ["apple", "banana", "cherry"] 
    ...:  
    ...: a_list.append(sub_list)                                                
In [37]: arr = np.array(a_list)                                                 
In [38]: a_list                                                                 
Out[38]: [['apple', 'banana', 'cherry']]
In [39]: arr                                                                    
Out[39]: array([['apple', 'banana', 'cherry']], dtype='<U6')
In [40]: arr[0]                                                                 
Out[40]: array(['apple', 'banana', 'cherry'], dtype='<U6')
In [41]: arr.shape                                                              
Out[41]: (1, 3)

np.array尝试根据其输入创建多维数组。 a_list是一个嵌套列表,可以从中创建2d数组。 arr[0]是从arr中选择的一维数组。

arr不是列表数组。这是一个字符串元素数组。

可以创建一个包含列表的数组:

In [42]: arr1 = np.empty(1, object)                                             
In [43]: arr1                                                                   
Out[43]: array([None], dtype=object)
In [44]: arr1[0]=sub_list                                                       
In [45]: arr1                                                                   
Out[45]: array([list(['apple', 'banana', 'cherry'])], dtype=object)
In [46]: arr1[0]                                                                
Out[46]: ['apple', 'banana', 'cherry']

但是对于大多数目的来说,它比列表a_list更好,并且在某些方面更糟(例如,不能对它进行.append)。

从嵌套列表制作二维数组的经典案例:

In [47]: np.array([[1,2,3],[4,5,6]])                                            
Out[47]: 
array([[1, 2, 3],
       [4, 5, 6]])
In [48]: _.shape                                                                
Out[48]: (2, 3)

对此纯数字数组进行算术运算比如果它是包含列表的对象dtype数组要快得多。 Python已经有可嵌套列表。