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

Python 为什么np.array会转换为数组列表及其元素?,python,numpy,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(a

我是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']

[“苹果”“香蕉”“樱桃”]
为什么
类型(数组[0])
也是
numpy.ndarray
?这不应该是一份清单吗

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)
但在大多数情况下,这比列表要好一点,
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)

与包含列表的对象数据类型数组相比,此纯数字数组上的数学运算要快得多。Python已经有了可嵌套的列表

列表数组在numpy中几乎毫无意义。嵌套结构将简单地变成嵌套数组是有道理的。你为什么要把它们列成清单?@roganjosh我不想把它们列成清单。我想,
np.darray
将只转换为numpy数组变量,而不是变量及其内容。我敢打赌这纯粹是为了方便起见,因为我想不出有哪种情况我不希望出现这种行为。也就是说,您应该更加关注它转换为的
dtype
,因为这可能会对结果数组的行为产生重大影响(例如,
object
不是“好消息”,如果您尝试应用numpy操作,效率会受到影响)
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)