介绍
Python 没有内置的数组数据类型,但是你可以使用模块与数组一起工作. 本文描述了如何使用数组和 NumPy 模块添加到数组。
在许多情况下,您可以使用列表
创建数组,因为列表
提供了灵活性,例如混合数据类型,并且仍然具有数组的所有特性。
<$>[注] 注: 您只能将相同数据类型的元素添加到数组中。
使用 Array 模块将元素添加到一个 Array
通过数组模块,您可以使用+
运算符连接或连接数组,并且可以使用附加()
,扩展()
和插入()
方法添加元素到数组。
Syntax | Description |
---|---|
+ operator, x + y | Returns a new array with the elements from two arrays. |
append(x) | Adds a single element to the end of the array. |
extend(iterable) | Adds a list, array, or other iterable to the end of array. |
insert(i, x) | Inserts an element before the given index of the array. |
下面的示例展示了如何通过连接两个数组来创建一个新的数组对象:
1import array
2
3# create array objects, of type integer
4arr1 = array.array('i', [1, 2, 3])
5arr2 = array.array('i', [4, 5, 6])
6
7# print the arrays
8print("arr1 is:", arr1)
9print("arr2 is:", arr2)
10
11# create a new array that contains all of the elements of both arrays
12# and print the result
13arr3 = arr1 + arr2
14print("After arr3 = arr1 + arr2, arr3 is:", arr3)
产量是:
1[secondary_label Output]
2arr1 is: array('i', [1, 2, 3])
3arr2 is: array('i', [4, 5, 6])
4After arr3 = arr1 + arr2, arr3 is: array('i', [1, 2, 3, 4, 5, 6])
上面的示例创建了一个新的数组,其中包含给定数组的所有元素。
下面的示例展示了如何使用append()
,extend()
和insert()
方法添加到数组:
1import array
2
3# create array objects, of type integer
4arr1 = array.array('i', [1, 2, 3])
5arr2 = array.array('i', [4, 5, 6])
6
7# print the arrays
8print("arr1 is:", arr1)
9print("arr2 is:", arr2)
10
11# append an integer to an array and print the result
12arr1.append(4)
13print("\nAfter arr1.append(4), arr1 is:", arr1)
14
15# extend an array by appending another array of the same type
16# and print the result
17arr1.extend(arr2)
18print("\nAfter arr1.extend(arr2), arr1 is:", arr1)
19
20# insert an integer before index position 0 and print the result
21arr1.insert(0, 10)
22print("\nAfter arr1.insert(0, 10), arr1 is:", arr1)
产量是:
1[secondary_label Output]
2arr1 is: array('i', [1, 2, 3])
3arr2 is: array('i', [4, 5, 6])
4
5After arr1.append(4), arr1 is: array('i', [1, 2, 3, 4])
6
7After arr1.extend(arr2), arr1 is: array('i', [1, 2, 3, 4, 4, 5, 6])
8
9After arr1.insert(0, 10), arr1 is: array('i', [10, 1, 2, 3, 4, 4, 5, 6])
在上面的示例中,每个方法都被调用到arr1
数组对象上,并修改原始对象。
将元素添加到 NumPy Array
使用NumPy模块,您可以使用NumPy append()
和 insert()
函数将元素添加到数组中。
......................................................................................................................................................................................................
「numpy.append()」函数使用背景中的「numpy.concatenate()」函数. 您可以使用「numpy.concatenate()」连接沿现有轴的序列。
<$>[注] **注:**您需要 安装NumPy来测试本节中的示例代码。
本节中的示例使用二维(2D)数组来突出说明函数如何根据您提供的轴值来操纵数组。
附加到使用 numpy.append()
的数组
NumPy 数组可以通过尺寸和形状来描述。当您将值或数组附加到多维数组时,附加的数组或值必须具有相同的形状,不包括在给定轴。
要了解2D数组的形状,请考虑行和列。 数组([[1, 2], [3, 4]])
具有相当于 2 行和 2 列的 2, 2
的形状,而 数组([[10, 20, 30], [40, 50, 60])
具有相当于 2 行和 3 列的 2, 3
的形状。
使用Python互动控制台(https://andsky.com/tech/tutorials/how-to-work-with-the-python-interactive-console)来测试这个概念。
首先,导入NumPy模块,然后创建一些数组并检查其形状。
导入 NumPy,然后创建并打印np_arr1
:
1import numpy as np
2np_arr1 = np.array([[1, 2], [3, 4]])
3print(np_arr1)
1[secondary_label Output]
2[[1 2]
3 [3 4]]
检查np_arr1
的形状:
1np_arr1.shape
1[secondary_label Output]
2(2, 2)
创建并打印另一个数组, np_arr2
:
1np_arr2 = np.array([[10, 20, 30], [40, 50, 60]])
2print(np_arr2)
1[secondary_label Output]
2[[10 20 30]
3 [40 50 60]]
检查np_arr2
的形状:
1np_arr2.shape
1[secondary_label Output]
2(2, 3)
然后尝试在不同的轴上附加数组. 您可以将2,3
的形状数组附加到2,2
的形状数组中,但不能沿1
轴,而不是0
轴。
附加 np_arr2
到 np_arr1
沿 0 轴或行:
1np.append(np_arr1, np_arr2, axis=0)
您将收到一个价值错误
:
1[secondary_label Output]
2Traceback (most recent call last):
3 File "<stdin>", line 1, in <module>
4 File "<__array_function__ internals>", line 5, in append
5 File "/Users/digitalocean/opt/anaconda3/lib/python3.9/site-packages/numpy/lib/function_base.py", line 4817, in append
6 return concatenate((arr, values), axis=axis)
7 File "<__array_function__ internals>", line 5, in concatenate
8ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 2 and the array at index 1 has size 3
您不能将具有三列宽的行的数组附加到只有两列宽的行的数组。
附加 np_arr2
到 np_arr1
沿轴 1 或按列:
1np.append(np_arr1, np_arr2, axis=1)
产量是:
1[secondary_label Output]
2array([[ 1, 2, 10, 20, 30],
3 [ 3, 4, 40, 50, 60]])
您可以将具有两个行高的列的数组附加到具有两个行高的列的另一个数组。
下面的示例展示了如何使用 numpy.append()
函数添加元素到 NumPy 数组:
1import numpy as np
2
3# create 2D array objects (integers)
4np_arr1 = np.array([[1, 2], [3, 4]])
5np_arr2 = np.array([[10, 20], [30, 40]])
6
7# print the arrays
8print("np_arr1 is:\n", np_arr1)
9print("np_arr2 is:\n", np_arr2)
10
11# append an array to the end of another array and print the result
12# both arrays are flattened before appending
13append_axis_none = np.append(np_arr1, np_arr2, axis=None)
14print("append_axis_none is:\n", append_axis_none)
15
16# append an array to the end of another array along axis 0 (append rows)
17# and print the result
18append_axis_0 = np.append(np_arr1, np_arr2, axis=0)
19print("append_axis_0 is:\n", append_axis_0)
20
21# append an array to the end of another array along axis 1 (append columns)
22# and print the result
23append_axis_1 = np.append(np_arr1, np_arr2, axis=1)
24print("append_axis_1 is:\n", append_axis_1)
产量是:
1[secondary_label Output]
2np_arr1 is:
3 [[1 2]
4 [3 4]]
5np_arr2 is:
6 [[10 20]
7 [30 40]]
8append_axis_none is:
9 [ 1 2 3 4 10 20 30 40]
10append_axis_0 is:
11 [[ 1 2]
12 [ 3 4]
13 [10 20]
14 [30 40]]
15append_axis_1 is:
16 [[ 1 2 10 20]
17 [ 3 4 30 40]]
上面的示例显示了numpy.append()
函数如何在 2D 数组的每个轴上工作,以及结果数组的形状如何变化。
使用numpy.insert()
添加到一个数组
numpy.insert()
函数将一个数组或值插入到另一个数组之前的指数,沿一个轴,并返回一个新的数组。
与numpy.append()
函数不同,如果轴不提供或指定为None
,则numpy.insert()
函数仅平板化了第一个数组,并且不会平板化要插入的值或数组。
下面的示例展示了如何使用numpy.insert()
函数将元素插入到数组中:
1import numpy as np
2
3# create array objects (integers)
4np_arr1 = np.array([[1, 2], [4, 5]])
5np_arr2 = np.array([[10, 20], [30, 40]])
6np_arr3 = np.array([100, 200, 300])
7
8# print the arrays
9print("np_arr1 is:\n", np_arr1)
10print("np_arr2 is:\n", np_arr2)
11print("np_arr3 is:\n", np_arr3)
12
13# insert a 1D array into a 2D array and then print the result
14# the original array is flattened before insertion
15insert_axis_none = np.insert(np_arr1, 1, np_arr3, axis=None)
16print("insert_axis_none is:\n", insert_axis_none)
17
18# insert an array into another array by row
19# and print the result
20insert_axis_0 = np.insert(np_arr1, 1, np_arr2, axis=0)
21print("insert_axis_0 is:\n", insert_axis_0)
22
23# insert an array into another array by column
24# and print the result
25insert_axis_1 = np.insert(np_arr1, 1, np_arr2, axis=1)
26print("insert_axis_1 is:\n", insert_axis_1)
产量是:
1[secondary_label Output]
2np_arr1 is:
3 [[1 2]
4 [4 5]]
5np_arr2 is:
6 [[10 20]
7 [30 40]]
8insert_axis_none is:
9 [ 1 100 200 300 2 4 5]
10insert_axis_0 is:
11 [[ 1 2]
12 [10 20]
13 [30 40]
14 [ 4 5]]
15insert_axis_1 is:
16 [[ 1 10 30 2]
17 [ 4 20 40 5]]
在上面的示例中,当您将2D 数组插入另一个2D 数组沿轴1时,在np_arr2
中的每个数组都被插入为一个单独的列到np_arr1
。如果您要将整个2D 数组插入另一个2D 数组中,请在obj
参数索引值周围包含平方数组,以表示整个数组应该在该位置之前插入。
下面的示例显示了围绕obj
(索引)参数的方块和没有方块的输出:
1import numpy as np
2
3# create 2D array objects (integers)
4np_arr1 = np.array([[1, 2], [3, 4]])
5np_arr2 = np.array([[10, 20], [30, 40]])
6
7# print the arrays
8print("np_arr1 is:\n", np_arr1)
9print("np_arr2 is:\n", np_arr2)
10
11# insert an array, column by column, into another array
12# and print the result
13insert_axis_1 = np.insert(np_arr1, 1, np_arr2, axis=1)
14print("insert_axis_1 is:\n", insert_axis_1)
15
16# insert a whole array into another array by column
17# and print the result
18insert_index_axis_1 = np.insert(np_arr1, [1], np_arr2, axis=1)
19print("insert_index_axis_1 is:\n", insert_index_axis_1)
产量是:
1[secondary_label Output]
2np_arr1 is:
3 [[1 2]
4 [3 4]]
5np_arr2 is:
6 [[10 20]
7 [30 40]]
8insert_axis_1 is:
9 [[ 1 10 30 2]
10 [ 3 20 40 4]]
11insert_index_axis_1 is:
12 [[ 1 10 20 2]
13 [ 3 30 40 4]]
上面的示例显示了numpy.insert()
如何将列插入到数组中,取决于索引符号。