如何在Python中向数组中添加元素
引言
Python没有内置的数组数据类型,但是有一些可以用来处理数组的模块。本文将描述如何使用array和NumPy模块向数组添加元素。当您需要创建整数和浮点数数组时,array模块非常有用。当您需要对数组进行数学运算时,NumPy模块非常有用。
在许多情况下,您可以使用列表来创建数组,因为列表提供了灵活性,例如混合数据类型,并且仍然具有数组的所有特征。在Python中了解更多关于列表的内容。
Note
使用数组模块将元素添加到一个数组中
使用数组模块,您可以使用 + 运算符连接或合并数组,也可以使用 append()、extend() 和 insert() 方法向数组添加元素。
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. |
以下示例演示了如何通过连接两个数组来创建一个新的数组对象:
import array
# create array objects, of type integer
arr1 = array.array('i', [1, 2, 3])
arr2 = array.array('i', [4, 5, 6])
# print the arrays
print("arr1 is:", arr1)
print("arr2 is:", arr2)
# create a new array that contains all of the elements of both arrays
# and print the result
arr3 = arr1 + arr2
print("After arr3 = arr1 + arr2, arr3 is:", arr3)
输出结果是:
arr1 is: array(‘i’, [1, 2, 3]) arr2 is: array(‘i’, [4, 5, 6]) After arr3 = arr1 + arr2, arr3 is: array(‘i’, [1, 2, 3, 4, 5, 6])
上述的例子创建了一个包含给定数组中所有元素的新数组。
以下示例演示如何使用append(),extend()和insert()方法向数组添加元素。
import array
# create array objects, of type integer
arr1 = array.array('i', [1, 2, 3])
arr2 = array.array('i', [4, 5, 6])
# print the arrays
print("arr1 is:", arr1)
print("arr2 is:", arr2)
# append an integer to an array and print the result
arr1.append(4)
print("\nAfter arr1.append(4), arr1 is:", arr1)
# extend an array by appending another array of the same type
# and print the result
arr1.extend(arr2)
print("\nAfter arr1.extend(arr2), arr1 is:", arr1)
# insert an integer before index position 0 and print the result
arr1.insert(0, 10)
print("\nAfter arr1.insert(0, 10), arr1 is:", arr1)
输出是:
arr1 is: array(‘i’, [1, 2, 3]) arr2 is: array(‘i’, [4, 5, 6]) After arr1.append(4), arr1 is: array(‘i’, [1, 2, 3, 4]) After arr1.extend(arr2), arr1 is: array(‘i’, [1, 2, 3, 4, 4, 5, 6]) After arr1.insert(0, 10), arr1 is: array(‘i’, [10, 1, 2, 3, 4, 4, 5, 6])
在前面的例子中,每个方法都在arr1数组对象上调用并修改了原始对象。
给NumPy数组添加元素
使用NumPy模块,你可以使用NumPy的append()和insert()函数向数组中添加元素。
Syntax | Description |
---|---|
numpy.append(arr, values, axis=None) |
Appends the values or array to the end of a copy of arr . If the axis is not provided, then default is None , which means both arr and values are flattened before the append operation. |
numpy.insert(arr, obj, values, axis=None) |
Inserts the values or array before the index (obj ) along the axis. If the axis is not provided, then the default is None , which means that only arr is flattened before the insert operation. |
numpy.append()函数在后台使用numpy.concatenate()函数。你可以使用numpy.concatenate()函数沿着现有的轴连接一个数组序列。在NumPy文档中了解更多有关数组操作的例程。
Note
本节中的示例使用二维数组来突出说明函数根据您提供的轴值来操作数组的方式。
使用numpy.append()函数来向数组中添加元素。
NumPy 数组可以通过维度和形状来描述。当您将值或数组追加到多维数组时,被追加的数组或值需要具有相同的形状,除非沿指定的轴方向。
要理解一个二维数组的形状,需要考虑行和列。例如,array([[1, 2], [3, 4]]) 的形状为2行2列,而array([[10, 20, 30], [40, 50, 60]]) 的形状为2行3列。
使用Python交互式控制台来测试这个概念。
首先,导入NumPy模块,然后创建一些数组并检查它们的形状。
导入NumPy,然后创建并打印np_arr1。
- import numpy as np
- np_arr1 = np.array([[1, 2], [3, 4]])
- print(np_arr1)
[[1 2] [3 4]]
查看np_arr1的形状。
- np_arr1.shape
(2, 2)
创建并打印另一个数组np_arr2。
- np_arr2 = np.array([[10, 20, 30], [40, 50, 60]])
- print(np_arr2)
[[10 20 30] [40 50 60]]
检查np_arr2的形状。
- np_arr2.shape
(2, 3)
然后尝试在不同的轴向上添加数组。你可以将一个形状为2×3的数组添加到一个沿着轴向1具有形状为2×2的数组上,但不能沿着轴向0添加。
将np_arr2沿着轴0添加到np_arr1,或者按行添加。
- np.append(np_arr1, np_arr2, axis=0)
您遇到一个 ValueError 错误:
Traceback (most recent call last): File “<stdin>”, line 1, in <module> File “<__array_function__ internals>”, line 5, in append File “/Users/digitalocean/opt/anaconda3/lib/python3.9/site-packages/numpy/lib/function_base.py”, line 4817, in append return concatenate((arr, values), axis=axis) File “<__array_function__ internals>”, line 5, in concatenate ValueError: 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沿着轴1附加到np_arr1上,即按列附加。
- np.append(np_arr1, np_arr2, axis=1)
输出为:
array([[ 1, 2, 10, 20, 30], [ 3, 4, 40, 50, 60]])
你可以将一个具有两行高度的列的数组附加到另一个具有两行高度的列的数组中。
下面的示例演示了如何使用numpy.append()函数向NumPy数组中添加元素。
import numpy as np
# create 2D array objects (integers)
np_arr1 = np.array([[1, 2], [3, 4]])
np_arr2 = np.array([[10, 20], [30, 40]])
# print the arrays
print("np_arr1 is:\n", np_arr1)
print("np_arr2 is:\n", np_arr2)
# append an array to the end of another array and print the result
# both arrays are flattened before appending
append_axis_none = np.append(np_arr1, np_arr2, axis=None)
print("append_axis_none is:\n", append_axis_none)
# append an array to the end of another array along axis 0 (append rows)
# and print the result
append_axis_0 = np.append(np_arr1, np_arr2, axis=0)
print("append_axis_0 is:\n", append_axis_0)
# append an array to the end of another array along axis 1 (append columns)
# and print the result
append_axis_1 = np.append(np_arr1, np_arr2, axis=1)
print("append_axis_1 is:\n", append_axis_1)
输出结果是:
np_arr1 is: [[1 2] [3 4]] np_arr2 is: [[10 20] [30 40]] append_axis_none is: [ 1 2 3 4 10 20 30 40] append_axis_0 is: [[ 1 2] [ 3 4] [10 20] [30 40]] append_axis_1 is: [[ 1 2 10 20] [ 3 4 30 40]]
上述例子展示了numpy.append()函数在2D数组的每个轴上的工作方式以及结果数组的形状如何改变。当轴为0时,数组按行追加。当轴为1时,数组按列追加。
使用numpy.insert()将元素添加到数组中
numpy.insert() 函数在给定的索引位置、沿指定的轴向将一个数组或数值插入另一个数组中,并返回一个新的数组。
与numpy.append()函数不同,如果未提供轴或指定为None,则numpy.insert()函数仅将第一个数组展平,并且不会展平要插入的值或数组。如果尝试将一个2D数组插入到未指定轴的2D数组中,将会引发ValueError错误。
以下示例演示了如何使用 numpy.insert() 函数将元素插入数组中。
import numpy as np
# create array objects (integers)
np_arr1 = np.array([[1, 2], [4, 5]])
np_arr2 = np.array([[10, 20], [30, 40]])
np_arr3 = np.array([100, 200, 300])
# print the arrays
print("np_arr1 is:\n", np_arr1)
print("np_arr2 is:\n", np_arr2)
print("np_arr3 is:\n", np_arr3)
# insert a 1D array into a 2D array and then print the result
# the original array is flattened before insertion
insert_axis_none = np.insert(np_arr1, 1, np_arr3, axis=None)
print("insert_axis_none is:\n", insert_axis_none)
# insert an array into another array by row
# and print the result
insert_axis_0 = np.insert(np_arr1, 1, np_arr2, axis=0)
print("insert_axis_0 is:\n", insert_axis_0)
# insert an array into another array by column
# and print the result
insert_axis_1 = np.insert(np_arr1, 1, np_arr2, axis=1)
print("insert_axis_1 is:\n", insert_axis_1)
输出是:
np_arr1 is: [[1 2] [4 5]] np_arr2 is: [[10 20] [30 40]] insert_axis_none is: [ 1 100 200 300 2 4 5] insert_axis_0 is: [[ 1 2] [10 20] [30 40] [ 4 5]] insert_axis_1 is: [[ 1 10 30 2] [ 4 20 40 5]]
在上面的例子中,当你在轴1上将一个2D数组插入到另一个2D数组时,np_arr2中的每个数组都被作为单独的列插入到np_arr1中。如果你想要将整个2D数组插入到另一个2D数组中,在`obj`参数索引值周围加上方括号,表示整个数组应该在该位置之前插入。没有方括号,numpy.insert()会将数组按顺序堆叠为列,插入到给定的索引之前。
以下示例显示了带有和不带有方括号的对象(索引)参数的输出情况:
import numpy as np
# create 2D array objects (integers)
np_arr1 = np.array([[1, 2], [3, 4]])
np_arr2 = np.array([[10, 20], [30, 40]])
# print the arrays
print("np_arr1 is:\n", np_arr1)
print("np_arr2 is:\n", np_arr2)
# insert an array, column by column, into another array
# and print the result
insert_axis_1 = np.insert(np_arr1, 1, np_arr2, axis=1)
print("insert_axis_1 is:\n", insert_axis_1)
# insert a whole array into another array by column
# and print the result
insert_index_axis_1 = np.insert(np_arr1, [1], np_arr2, axis=1)
print("insert_index_axis_1 is:\n", insert_index_axis_1)
输出为:
np_arr1 is: [[1 2] [3 4]] np_arr2 is: [[10 20] [30 40]] insert_axis_1 is: [[ 1 10 30 2] [ 3 20 40 4]] insert_index_axis_1 is: [[ 1 10 20 2] [ 3 30 40 4]]
上面的例子展示了如何使用numpy.insert()根据索引符号将列插入数组中。
结论
在这篇文章中,你使用了array和NumPy模块向数组添加元素。继续学习更多关于NumPy和Python的教程。