Numpy数组在Python中被使用,特别是在数据分析、机器学习和数据科学中被用来处理数字数据。在这篇文章中,我们将使用例子和工作代码讨论在Python中创建numpy数组的不同方法。
在Python中,有各种函数来创建numpy数组。让我们逐一讨论它们。
在Python中从列表到Numpy数组
我们可以使用numpy.array() 函数从一个Python列表创建一个numpy数组。array() 函数将一个列表作为其输入参数并返回一个numpy数组。在这种情况下,数组元素的数据类型与列表中元素的数据类型相同。
myList=[1,2,3,4,5]
print("The list is:")
print(myList)
myArr = np.array(myList)
print("The array is:")
print(myArr)
print("The data type of array is:")
print(myArr.dtype)
输出。
The list is:
[1, 2, 3, 4, 5]
The array is:
[1 2 3 4 5]
The data type of array is:
int64
在上面的代码中,我们首先使用array() 函数创建了一个numpy数组。之后,我们使用NumPy数组的dtype 属性来获得数组中元素的数据类型。在这里,你可以看到,一个整数列表给了我们一个数据类型为int64 的元素数组。
你也可以使用array() 函数中的dtype 参数明确指定数组元素的数据类型,如下例所示。
myList=[1,2,3,4,5]
print("The list is:")
print(myList)
myArr = np.array(myList,dtype="float")
print("The array is:")
print(myArr)
print("The data type of array is:")
print(myArr.dtype)
输出。
The list is:
[1, 2, 3, 4, 5]
The array is:
[1. 2. 3. 4. 5.]
The data type of array is:
float64
在上面的代码中,我们给出了一个整数的列表作为输入参数。然而,输出的数组包含数据类型为float64 的元素,因为我们在创建数组时指定了这一类型。
要创建一个二维numpy数组,你可以将一个列表传递给array() ,如下图所示。
myList=[[1,2,3,4,5],[6,7,8,9,10]]
print("The list is:")
print(myList)
myArr = np.array(myList,dtype="float")
print("The array is:")
print(myArr)
print("The data type of array is:")
print(myArr.dtype)
输出。
The list is:
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
The array is:
[[ 1. 2. 3. 4. 5.]
[ 6. 7. 8. 9. 10.]]
The data type of array is:
float64
创建一个具有不同数据类型元素的Numpy数组
如果输入的列表包含不同但兼容的数据类型的元素,numpy数组中的元素会自动转换为更广泛的数据类型。例如,如果我们有一个floats和ints的列表,结果numpy数组的元素将是float64数据类型。你可以在下面的例子中观察到这一点。
myList=[1,3.14,4,5]
print("The list is:")
print(myList)
myArr = np.array(myList)
print("The array is:")
print(myArr)
print("The data type of array is:")
print(myArr.dtype)
输出。
The list is:
[1, 3.14, 4, 5]
The array is:
[1. 3.14 4. 5. ]
The data type of array is:
float64
这里,我们给出了一个包含整数和浮点数的列表。由于这个原因,numpy数组的所有元素都被转换为浮点数。
如果输入的列表包含str和int这样的数据类型,产生的numpy数组元素将有字符串数据类型,用<u32或<u64表示。这表明这些元素被作为unicode对象分别存储在4字节或8字节中。
myList=[1,"Aditya", 3.14,4,5]
print("The list is:")
print(myList)
myArr = np.array(myList)
print("The array is:")
print(myArr)
print("The data type of array is:")
print(myArr.dtype)
输出。
The list is:
[1, 'Aditya', 3.14, 4, 5]
The array is:
['1' 'Aditya' '3.14' '4' '5']
The data type of array is:
<U32
当输入的列表元素具有不同的数据类型时,你也可以选择指定阵列元素的数据类型。例如,如果你有一个浮点数和英寸的列表,你想让数组元素的数据类型为英寸,你可以在dtype 参数中指定,如下所示。
myList=[1, 3.14,4,5]
print("The list is:")
print(myList)
myArr = np.array(myList,dtype="int")
print("The array is:")
print(myArr)
print("The data type of array is:")
print(myArr.dtype)
输出。
The list is:
[1, 3.14, 4, 5]
The array is:
[1 3 4 5]
The data type of array is:
int64
在这里,你可以看到数据类型为float的列表元素已经被转换为int。因此,3.14已经被转换为3。
你也可以将这些元素转换为其他数据类型,比如字符串,如下图所示。
myList=[1, 3.14,4,5]
print("The list is:")
print(myList)
myArr = np.array(myList,dtype="str")
print("The array is:")
print(myArr)
print("The data type of array is:")
print(myArr.dtype)
输出。
The list is:
[1, 3.14, 4, 5]
The array is:
['1' '3.14' '4' '5']
The data type of array is:
<U4
在指定数组元素的数据类型时,你需要确保输入列表中的所有元素都能被转换为numpy数组中的指定数据类型。如果不这样做,程序就会遇到错误。例如,我们不能将一个字母转换成一个整数。因此,如果我们为一个包含有字母的字符串的输入列表指定numpy数组的目标数据类型为int,程序将遇到TypeError异常,如下所示。
myList=[1,"Aditya", 3.14,4,5]
print("The list is:")
print(myList)
myArr = np.array(myList,dtype="int")
print("The array is:")
print(myArr)
print("The data type of array is:")
print(myArr.dtype)
输出。
The list is:
[1, 'Aditya', 3.14, 4, 5]
ValueError Traceback (most recent call last)
/tmp/ipykernel_4810/3347589872.py in <module>
2 print("The list is:")
3 print(myList)
----> 4 myArr = np.array(myList,dtype="int")
5 print("The array is:")
6 print(myArr)
ValueError: invalid literal for int() with base 10: 'Aditya'
在这个例子中,我们指定数组元素的数据类型为整数。然而,输入的列表中包含了一个不能被转换为整数的字符串。因此,程序遇到ValueError invalid literal for int() with base 10 错误。
在Python中检查Numpy数组的属性
你可以对Numpy数组进行许多操作来检查其属性。例如,你可以使用numpy数组的ndim 属性来检查数组的尺寸,如下所示。
myList=[1,"Aditya", 3.14,4,5]
print("The list is:")
print(myList)
myArr = np.array(myList,dtype="str")
print("The array is:")
print(myArr)
print("The dimension of array is:")
print(myArr.ndim)
输出。
The list is:
[1, 'Aditya', 3.14, 4, 5]
The array is:
['1' 'Aditya' '3.14' '4' '5']
The dimension of array is:
1
这里,我们创建了一个一维数组。因此,它的维数是1。
对于一个二维列表的输入,数组的维数将是2,如下图所示。
myList=[[1,2,3,4,5],[6,7,8,9,10]]
print("The list is:")
print(myList)
myArr = np.array(myList,dtype="str")
print("The array is:")
print(myArr)
print("The dimension of array is:")
print(myArr.ndim)
输出。
The list is:
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
The array is:
[['1' '2' '3' '4' '5']
['6' '7' '8' '9' '10']]
The dimension of array is:
2
为了检查numpy数组中数组元素的数据类型,你可以使用dtype 属性。dtype 属性给出一个dtype 对象作为输出。为了获得数据类型的名称,你可以使用 dtype.name 属性,在前面的章节中已经讨论过。
你也可以使用shape 属性找到numpy数组的形状。numpy数组的shape 属性会返回一个元组,其第一和第二元素分别为行数和列数。你可以在下面的例子中观察到这一点。
myList=[[1,2,3,4,5],[6,7,8,9,10]]
print("The list is:")
print(myList)
myArr = np.array(myList,dtype="str")
print("The array is:")
print(myArr)
print("The shape of array is:")
print(myArr.shape)
输出。
The list is:
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
The array is:
[['1' '2' '3' '4' '5']
['6' '7' '8' '9' '10']]
The shape of array is:
(2, 5)
在这个例子中,我们创建了一个具有2-D列表的numpy数组,其内部有两个各5个元素的列表。因此,numpy数组的形状是(2,5)。
创建零、一和特定序列的Numpy数组
使用内置的数组操作,我们可以创建不同类型的numpy数组。让我们来讨论其中的一些。
在Python中创建包含1的Numpy数组
你可以使用ones() 函数创建包含1的numpy数组。要使用ones() 函数创建一个包含1的一维数组,你需要将数组中需要的元素数量作为输入参数。执行后,ones() 函数将返回一个具有所需元素数量的一维numpy数组,如下图所示。
myArr = np.ones(5)
print("The array is:")
print(myArr)
输出。
The array is:
[1. 1. 1. 1. 1.]
默认情况下,数组中元素的数据类型是float64。要创建一个整数数组,你可以使用ones() 函数的dtype 参数来指定元素的数据类型,如下例所示。
myArr = np.ones(5,dtype="int")
print("The array is:")
print(myArr)
输出。
The array is:
[1 1 1 1 1]
在这里,你可以看到数组包含整数作为其元素,而不是浮点数。
要使用ones() 函数创建 2-D 数组,你可以向ones() 函数传递一个包含行数和列数的元组,格式为 (number_of_rows, number_of_columns) 。执行后,ones() 函数将返回所需的数组。
myArr = np.ones((2,3),dtype="int")
print("The array is:")
print(myArr)
输出。
The array is:
[[1 1 1]
[1 1 1]]
同样,数组中元素的默认数据类型是float64 。因此,你可以使用ones() 函数的参数dtype ,改变数组元素的数据类型。
在Python中创建包含0的Numpy数组
就像1的数组一样,你也可以使用zeros() 函数创建包含0的numpy数组。
要使用zeros() 函数创建一个包含1的一维数组,你需要传递数组中所需要的元素数量作为输入参数。执行后,zeros() 函数将返回一个具有所需零数的一维numpy数组,如下图所示。
myArr = np.zeros(5)
print("The array is:")
print(myArr)
输出。
The array is:
[0. 0. 0. 0. 0.]
默认情况下,数组中元素的数据类型是float64 。要创建一个整数数组,你可以使用zeros() 函数的dtype 参数来指定元素的数据类型,如下例所示。
myArr = np.zeros(5,dtype="int")
print("The array is:")
print(myArr)
输出。
The array is:
[0 0 0 0 0]
在这里,你可以看到数组包含整数作为其元素,而不是浮点数字。
要使用zeros() 函数创建二维数组,你可以向zeros() 函数传递一个包含行数和列数的元组,格式为(number_of_rows, number_of_columns) 。执行后,zeros() 函数将返回所需的带零的数组,如下图所示。
myArr = np.zeros((2,3),dtype="int")
print("The array is:")
print(myArr)
输出。
The array is:
[[0 0 0]
[0 0 0]]
同样,数组中元素的默认数据类型是float64 。因此,你可以使用zeros() 函数的参数dtype ,改变数组元素的数据类型。
用0到1之间的随机数创建Numpy数组
你可以使用numpy.random.rand() 函数来创建元素范围为0到1的numpy数组。
要创建一个1-D的numpy数组,你可以将所需元素的数量作为输入参数传给rand() 。执行后,rand() 函数返回一个numpy数组,包含指定数量的0到1之间的浮点数。
myArr = np.random.rand(5)
print("The array is:")
print(myArr)
输出。
The array is:
[0.693256 0.26514033 0.86510414 0.52163653 0.1188453 ]
要创建一个二维随机数组,可以将行数作为第一个输入参数,将所需数组的列数作为第二个参数。执行后,rand() 函数将返回具有所需形状的numpy数组,如下图所示。
myArr = np.random.rand(2,3)
print("The array is:")
print(myArr)
输出。
The array is:
[[0.03166493 0.06408176 0.73167115]
[0.49889714 0.34302884 0.9395251 ]]
用随机整数创建Numpy数组
要在一个范围内用随机整数创建一个numpy数组,你可以使用random.randint() 函数。random.randint() 函数的语法如下。
random.randint(start, end, number_of_elements)
这里。
- 参数
start表示一个范围的起始数。 - 参数
end表示一个范围内的最后一个数字。 - 参数
number_of_elements表示所需数组中的元素数量。
默认情况下,random.randint() 函数返回的数组元素的数据类型是int64 。
myArr = np.random.randint(2,100,5)
print("The array is:")
print(myArr)
输出。
The array is:
[22 10 30 87 96]
你不能通过指定dtype 参数来使用randint() 函数创建一个浮点数组。如果你试图这样做,程序将遇到一个TypeError 异常。
在Python中创建元素在一个范围内的Numpy数组
如果你想创建一个元素在某个范围内的Numpy数组,你可以使用numpy.arange() 函数来实现。
要创建一个元素从0到N的数组,你可以把N作为输入参数传给 arange() 函数。在arange() 函数返回的数组中,你只能得到N-1之前的数字。这是因为N在范围内是排他的。
myArr = np.arange(10)
print("The array is:")
print(myArr)
输出。
The array is:
[0 1 2 3 4 5 6 7 8 9]
在这里,我们将10传给了arange() 函数。因此,它返回了一个包含0到9的元素的数组。
要创建一个元素在M和N之间的numpy数组,你可以将M作为第一个输入参数,N作为第二个输入参数传给arange() 。执行后,你将得到一个包含从M到N-1数字的numpy数组。
myArr = np.arange(3,10)
print("The array is:")
print(myArr)
输出。
The array is:
[3 4 5 6 7 8 9]
这里,N必须大于M,否则,你将得到一个空数组,如下图所示。
myArr = np.arange(13,10)
print("The array is:")
print(myArr)
输出。
The array is:
[]
你也可以决定数组中两个连续元素之间的差异。为此,你可以将所需的数字之差作为第三个输入参数传给arange() 函数。执行后,它将返回一个numpy数组,该数组中的元素在一个范围内,它们之间有一个常数差。
myArr = np.arange(3,10,2)
print("The array is:")
print(myArr)
输出。
The array is:
[3 5 7 9]
如果你想得到一个元素递减的数组,你可以把一个较大的数字作为第一个输入,把一个较小的数字作为第二个输入参数传给arange() 。作为第三个输入参数,你需要传递一个负数作为两个连续元素的差。通过这种方式,你将得到一个元素按递减顺序排列的numpy数组,如下例所示。
myArr = np.arange(23,10,-2)
print("The array is:")
print(myArr)
输出。
The array is:
[23 21 19 17 15 13 11]
默认情况下, arange() 函数返回一个以整数为元素的数组。为了得到一个浮点数数组,你可以在arange() 函数的dtype 参数中指定数据类型,如下图所示。
myArr = np.arange(23,10,-2,dtype="float")
print("The array is:")
print(myArr)
输出。
The array is:
[23. 21. 19. 17. 15. 13. 11.]
一个范围内所需元素数量的Numpy数组
与其决定numpy数组中元素的范围,你也可以指定你想包含在数组中的、在给定范围内的元素数量。为此,你可以使用linspace() 函数。
linspace() 函数的语法如下。
linspace(start, end, number_of_elements)
这里。
- 参数
start表示一个范围的起始数。 - 参数
end表示一个范围的最后一个数字。 - 参数
number_of_elements表示所需数组中的元素数量。
默认情况下,linspace() 函数返回的数组元素的数据类型是float64 。
myArr = np.linspace(2,50,10)
print("The array is:")
print(myArr)
输出。
The array is:
[ 2. 7.33333333 12.66666667 18. 23.33333333 28.66666667
34. 39.33333333 44.66666667 50. ]
你也可以通过给end参数传递一个较小的数字,给start参数传递一个较大的数字,以相反的顺序获得数组中的元素,如下所示。
myArr = np.linspace(122,50,10)
print("The array is:")
print(myArr)
输出。
The array is:
[122. 114. 106. 98. 90. 82. 74. 66. 58. 50.]
linspace() 函数返回一个浮点数的数组。然而,你可以通过使用linspace() 函数的dtype 参数来创建一个整数元素的numpy数组。为此,你只需要在linspace() 方法中把字面意思 "int" 和其他输入参数一起传给dtype 参数。
在Python中向Numpy数组中加载一个文件
你也可以通过加载一个文本文件来创建一个numpy数组。为此,你可以使用loadtxt() 函数。
loadtxt() 函数将文件名作为其第一个输入参数,将元素的数据类型作为dtype参数的输入参数。执行后,它返回一个numpy数组,如下图所示。
File_data = np.loadtxt("1d.txt", dtype=int)
print(File_data)
输出。
[1 2 3 5 6]
如果输入文件中有除空格和数字以外的字符,程序会出错。你可以在下面的例子中观察到这一点。
File_data = np.loadtxt("1d.txt", dtype=int)
print(File_data)
输出。
ValueError Traceback (most recent call last)
/tmp/ipykernel_4810/1616002059.py in <module>
----> 1 File_data = np.loadtxt("1d.txt", dtype=int)
2 print(File_data)
ValueError: invalid literal for int() with base 10: '1,2,3,5,6'
你可以通过读取一个具有二维数据的文件来创建一个二维的numpy数组,如下图所示。
File_data = np.loadtxt("2d.txt", dtype=int)
print(File_data)
输出。
[[1 2 3]
[4 5 6]
[7 8 9]]
通过观察输出,我们可以推断出loadtxt() ,该函数首先将文件读成一个字符串。之后,它在换行处将文件分割。换行后的每个字符串被认为是一个新行。然后,它在空格处分割每一行,以获得numpy数组中的各个元素。
总结
在这篇文章中,我们已经讨论了在Python中使用numpy模块创建数组的不同方法。