Numpy中的append函数使用详解
参考:numpy append
Numpy是Python中用于科学计算的基础库之一,它提供了一个强大的数组对象ndarray
以及用于对这些数组进行各种操作的函数和方法。append
函数是Numpy中用于在数组的末尾添加元素的函数。在本文中,我们将详细介绍如何使用Numpy的append
函数,并提供多个示例代码来展示其用法。
Numpy append函数基础
Numpy的append
函数用于将值附加到数组的末尾。它的基本语法如下:
numpy.append(arr, values, axis=None)
arr
是要追加数据的输入数组。values
是要追加到arr
末尾的值。axis
指定追加的轴。如果未提供,则values
将被展平之后追加。
示例1:向一维数组追加元素
import numpy as np
arr = np.array([1, 2, 3])
values = 4
result = np.append(arr, values)
print(result)
Output:
示例2:向一维数组追加多个元素
import numpy as np
arr = np.array([1, 2, 3])
values = [4, 5, 6]
result = np.append(arr, values)
print(result)
Output:
示例3:向二维数组追加元素
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
values = [7, 8, 9]
result = np.append(arr, [values], axis=0)
print(result)
Output:
示例4:向二维数组追加元素,不指定轴
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
values = [7, 8, 9]
result = np.append(arr, values)
print(result)
Output:
Numpy append函数高级用法
在Numpy中,append
函数不仅可以用于一维数组,还可以用于多维数组。当处理多维数组时,指定axis
参数变得尤为重要。
示例5:沿特定轴向二维数组追加行
import numpy as np
arr = np.array([["numpyarray.com1", "numpyarray.com2"], ["numpyarray.com3", "numpyarray.com4"]])
values = ["numpyarray.com5", "numpyarray.com6"]
result = np.append(arr, [values], axis=0)
print(result)
Output:
示例6:沿特定轴向二维数组追加列
import numpy as np
arr = np.array([["numpyarray.com1", "numpyarray.com2"], ["numpyarray.com3", "numpyarray.com4"]])
values = [["numpyarray.com5"], ["numpyarray.com6"]]
result = np.append(arr, values, axis=1)
print(result)
Output:
示例7:向三维数组追加数据
import numpy as np
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
values = [[[9, 10], [11, 12]]]
result = np.append(arr, values, axis=0)
print(result)
Output:
示例8:沿特定轴向三维数组追加数据
import numpy as np
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
values = [[[9, 10]], [[11, 12]]]
result = np.append(arr, values, axis=1)
print(result)
Output:
示例9:追加数据到空数组
import numpy as np
arr = np.array([])
values = ["numpyarray.com1", "numpyarray.com2", "numpyarray.com3"]
result = np.append(arr, values)
print(result)
Output:
示例10:使用append合并两个数组
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
result = np.append(arr1, arr2)
print(result)
Output:
Numpy append函数的注意事项
使用Numpy的append
函数时,需要注意以下几点:
append
操作不是原地操作,它会返回一个新的数组。- 当
axis
未指定时,values
会被展平然后追加到arr
的末尾。 - 当指定
axis
时,values
的形状必须与arr
在该轴上的形状匹配。
示例11:追加不匹配形状的数据将引发错误
import numpy as np
arr = np.array([[1, 2], [3, 4]])
values = [5, 6, 7]
try:
result = np.append(arr, [values], axis=0)
print(result)
except ValueError as e:
print(e)
Output:
示例12:展平后追加多维数组
import numpy as np
arr = np.array([[1, 2], [3, 4]])
values = [[5, 6], [7, 8]]
result = np.append(arr, values)
print(result)
Output:
示例13:追加后保持原数组不变
import numpy as np
arr = np.array([1, 2, 3])
values = 4
result = np.append(arr, values)
original_array = arr.copy()
print(original_array)
Output:
示例14:使用循环追加元素
import numpy as np
arr = np.array([1, 2, 3])
for i in range(4, 7):
arr = np.append(arr, i)
print(arr)
Output:
示例15:追加不同类型的数据
import numpy as np
arr = np.array([1, 2, 3])
values = ["numpyarray.com1", "numpyarray.com2"]
result = np.append(arr, values)
print(result)
Output:
Numpy append函数与其他函数的比较
Numpy中还有其他函数可以用来合并数组,例如concatenate
、vstack
和hstack
。这些函数在某些情况下比append
更高效或更适合。
示例16:使用concatenate合并数组
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
result = np.concatenate((arr1, arr2))
print(result)
Output:
示例17:使用vstack垂直堆叠数组
import numpy as np
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
result = np.vstack((arr1, arr2))
print(result)
Output:
示例18:使用hstack水平堆叠数组
import numpy as np
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
result = np.hstack((arr1, arr2))
print(result)
Output:
示例19:使用append与concatenate比较性能
import numpy as np
import time
arr1 = np.random.rand(1000000)
arr2 = np.random.rand(1000000)
start = time.time()
result = np.append(arr1, arr2)
end = time.time()
print("Append time: ", end - start)
start = time.time()
result = np.concatenate((arr1, arr2))
end = time.time()
print("Concatenate time: ", end - start)
Output:
示例20:使用append与vstack/hstack比较性能
import numpy as np
import time
arr1 = np.random.rand(1000, 1000)
arr2 = np.random.rand(1000, 1000)
start = time.time()
result = np.append(arr1, arr2, axis=0)
end = time.time()
print("Append time: ", end - start)
start = time.time()
result = np.vstack((arr1, arr2))
end = time.time()
print("Vstack time: ", end - start)
start = time.time()
result = np.append(arr1, arr2, axis=1)
end = time.time()
print("Append time: ", end - start)
start = time.time()
result = np.hstack((arr1, arr2))
end = time.time()
print("Hstack time: ", end - start)
Output:
总结
Numpy的append
函数是一个强大的工具,可以用于在数组的末尾添加元素。它可以处理一维和多维数组,可以沿特定轴添加元素,也可以将元素展平后添加。然而,append
函数并不是原地操作,它会返回一个新的数组,这可能会影响性能。此外,当处理多维数组时,需要注意values
的形状必须与arr
在指定轴上的形状匹配,否则会引发错误。
在某些情况下,使用concatenate
、vstack
或hstack
可能更高效或更适合。这些函数可以合并两个或多个数组,而不仅仅是在数组的末尾添加元素。在性能方面,concatenate
通常比append
更快,而vstack
和hstack
在处理多维数组时可能更快。