NumPy Ndarray 对象


NumPy Ndarray 对象

NumPy NdarrayNumPy 库最重要的一个对象之一。它是N-dimensional array array的缩写,即N维度数组。该对象是一个由同质的元素(可以是整数、浮点数等)组成,被存储在连续的内存空间中,该数组中所有元素的类型必须是相同的。

NumPy Ndarray 容易被认为是一个Python中的列表,但它与列表有很大的区别:NumPy Ndarray 优化了查询和操作数组的速度,并提供了许多功能和方法来操作它。事实上,如果你要在Python中做科学计算,那么你需要使用NumPy Ndarray 来存储数值数据。

创建NumPy Ndarray:

可以通过几种方式创建NumPy Ndarray:

  1. 常规方法:使用NumPy 库中的array方法。
import numpy as np

a = np.array([1,2,3])
print(a)
#输出:[1 2 3]
  1. 使用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。

  1. 通过从文件中读取数据。

Ndarray的属性

  1. ndim属性:这个属性返回数组的维数(即数组的轴数或秩),等同于 len(arr.shape)。
a = np.array([[1, 2], [3, 4]])
print(a.ndim)
#输出:2
  1. shape属性:这个属性是一个表示数组维度的元组(del),它的每个元素表示对应维度的大小。在Numpy中,维度(dimensions)叫做轴(axes),轴的数量叫做秩(rank)。
a = np.array([[1, 2], [3, 4]])
print(a.shape)
#输出:(2, 2)
  1. size属性:这个属性代表着数组中的元素总个数。
a = np.array([[1, 2], [3, 4]])
print(a.size)
#输出:4
  1. 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库的重要对象之一,它优化了查询和操作数组的速度,并提供了许多方法来进行相应操作。它是数据科学中必不可少的。