我是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
?不应该是清单吗?
答案 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已经有可嵌套列表。