NumPy Ndarray 对象
NumPy Ndarray 对象
NumPy Ndarray 是NumPy 库最重要的一个对象之一。它是N-dimensional array array的缩写,即N维度数组。该对象是一个由同质的元素(可以是整数、浮点数等)组成,被存储在连续的内存空间中,该数组中所有元素的类型必须是相同的。
NumPy Ndarray 容易被认为是一个Python中的列表,但它与列表有很大的区别:NumPy Ndarray 优化了查询和操作数组的速度,并提供了许多功能和方法来操作它。事实上,如果你要在Python中做科学计算,那么你需要使用NumPy Ndarray 来存储数值数据。
创建NumPy Ndarray:
可以通过几种方式创建NumPy Ndarray:
- 常规方法:使用NumPy 库中的array方法。
import numpy as np
a = np.array([1,2,3])
print(a)
#输出:[1 2 3]
- 使用numpy提供的特殊函数, 如
zeros
,ones
,arange
,linspace
,full
等,来创建Ndarray。
#创建一个全部由 0 组成的2*2二维数组
np.zeros((2,2))
#创建一个由 1 组成的 3*3二维数组
np.ones((3,3))
#以指定的间隔创建一个一维数组
np.arange(0,10,2)
#线性创建一个数组三等分的点数
np.linspace(0,1,3)
#创建一个全部由3组成的2*2的二维数组
np.full((2,2),3)
注:a,b表示的是数值,n 表示点数。np.linspace(a,b, n)
的输出的数组会由a来开始,b来结束, n个分隔点,包含a和b。
- 通过从文件中读取数据。
Ndarray的属性
ndim
属性:这个属性返回数组的维数(即数组的轴数或秩),等同于 len(arr.shape)。
a = np.array([[1, 2], [3, 4]])
print(a.ndim)
#输出:2
shape
属性:这个属性是一个表示数组维度的元组(del),它的每个元素表示对应维度的大小。在Numpy中,维度(dimensions)叫做轴(axes),轴的数量叫做秩(rank)。
a = np.array([[1, 2], [3, 4]])
print(a.shape)
#输出:(2, 2)
size
属性:这个属性代表着数组中的元素总个数。
a = np.array([[1, 2], [3, 4]])
print(a.size)
#输出:4
dtype
属性:这个属性代表着数组中元素的数据类型。
a = np.array([[1, 2], [3, 4]])
print(a.dtype)
#输出:int64
Ndarray 的切片和索引
访问 Ndarray 中的元素需要访问的元素的位置或位置范围:
- 切片使用切片符号表示 “:"。
- Ndarray 元素访问方式和 Python 的标准列表相同。
- 通过将 ndarray 对象传递给 Python 的基本访问方法(如 min、max、sum)并用可选的参数轴指定操作的轴来执行通用操作。
import numpy as np
# 创建一个 4*4 的二维数组,并打印
a = np.array([[0,1,2,3],
[4,5,6,7],
[8,9,10,11],
[12,13,14,15]])
print(a)
# 以下是基本的索引方式,取得的是一个数
print("二维数组中第(0,0)号元素 ",a[0,0])
print("二维数组中第(1,2)号元素 ",a[1,2])
# 以下是一些切片操作,返回结果为数组或子数组
print("切去第一行,得到2到4行的切片:")
print(a[1:4])
print("切去第二列,得到第一列(0,4,8,12)的切片:")
print(a[:,0])
print("切去第一行和第一列得到一个 3*3 的子数组:")
print(a[1:4, 1:4])
以上的输出如下:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
二维数组中第(0,0)号元素 0
二维数组中第(1,2)号元素 6
切去第一行,得到2到4行的切片:
[[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
切去第二列,得到第一列(0,4,8,12)的切片:
[ 0 4 8 12]
切去第一行和第一列得到一个 3*3 的子数组:
[[ 5 6 7]
[ 9 10 11]
[13 14 15]]
Ndarray的基本运算
数组运算
- 数组间的基本运算,比如加减乘除等:
import numpy as np
# 创建两个 2x2 的矩阵 a 和 b
a = np.array([[1, 2],
[3, 4]])
b = np.array([[5, 6],
[7, 8]])
# 加法
print(a + b)
# 减法
print(a - b)
# 数组之间的乘法,不是矩阵乘法
print(a * b)
# 数组与标量的乘法
print(6 * a)
# 数组除以标量
print(a / 2)
输出为:
[[ 6 8]
[10 12]]
[[-4 -4]
[-4 -4]]
[[ 5 12]
[21 32]]
[[ 6 12]
[18 24]]
[[0.5 1. ]
[1.5 2. ]]
聚合函数
NumPy 提供了许多聚合函数,如最小值、最大值、和、平均值等。
import numpy as np
a = np.array([[0,1,2,3],
[4,5,6,7],
[8,9,10,11],
[12,13,14,15]])
# 计算矩阵的最大值
print(np.max(a))
# 计算矩阵的最小值
print(np.min(a))
# 计算各列的和
print(np.sum(a, axis=0))
# 计算各行的平均值
print(np.mean(a, axis=1))
# 计算各列的方差
print(np.var(a, axis=0))
# 计算矩阵的标准差
print(np.std(a))
而 axis = 0 表示以列为单位,axis = 1 表示以行为单位。
以上输出的结果为:
15
0
[24 28 32 36]
[ 1.5 5.5 9.5 13.5]
[21.25 21.25 21.25 21.25]
4.6097722286464435
数组合并和拆分
NumPy 还提供了一些方法来合并和拆分数组。比如:
- concatenate:将两个数组按照给定的轴合并为一个数组。
- vstack:垂直堆叠两个数组。
- hstack:水平拼接两个数组。
- split:将一个数组拆分成若干子数组。
import numpy as np
# 创建两个 2*2 的数组a,b
a = np.array([[1, 2],
[3, 4]])
b = np.array([[5, 6],
[7, 8]])
# 使用 concatenate 合并数组 a 和 b
print(np.concatenate((a,b), axis=0))
# 使用 vstack 堆叠 a 和 b
print(np.vstack((a, b)))
# 使用 hstack 水平堆叠 a 和 b
print(np.hstack((a, b)))
# uarry_split 可以使用 split() 函数来拆分数组
print(np.split(a, 2))
以上输出为:
[[1 2]
[3 4]
[5 6]
[7 8]]
[[1 2]
[3 4]
[5 6]
[7 8]]
[[1 2 5 6]
[3 4 7 8]]
[array([[1, 2]]), array([[3, 4]])]
总结
本篇文档简单介绍了Ndarray的创建,属性、切片和索引以及运算。Ndarray是NumPy库的重要对象之一,它优化了查询和操作数组的速度,并提供了许多方法来进行相应操作。它是数据科学中必不可少的。