Python的数组是什么及怎么应用

什么是Python的数组

Python中的数组是一个列表或元组,该列表或元组中包含相同的数据类型。数组在Python中又称为NumPy数组,它是由NumPy库提供的一种数据类型。

NumPy库是Python中科学计算的核心库之一,它提供了高效的多维数组运算能力,是很多科学计算和数据分析库的基础。

使用NumPy数组比使用Python内置的列表或元组具有更高的效率和更好的性能,特别是在科学计算和数据分析中,需要处理大规模数据集时尤为明显。

NumPy数组怎么定义和创建

通过列表或元组创建数组

可以通过将列表或元组传递给NumPy的array()函数来创建一个NumPy数组。下面是一个通过列表创建NumPy数组的示例:

import numpy as np

list1 = [1, 2, 3, 4, 5]

arr1 = np.array(list1)

print(arr1)

# output: [1 2 3 4 5]

同样的,也可以通过元组创建NumPy数组:

import numpy as np 

tuple1 = (1, 2, 3, 4, 5)

arr1 = np.array(tuple1)

print(arr1)

# output: [1 2 3 4 5]

通过NumPy的函数创建数组

除了通过列表或元组创建数组之外,NumPy库还提供了一些函数来创建数组。

通过arange函数创建数组

NumPy中的arange()函数类似于Python的内置函数range(),但输出的结果是一个NumPy数组。下面是一个创建NumPy数组的简单示例:

import numpy as np 

arr1 = np.arange(0, 10, 1)

print(arr1)

# output: [0 1 2 3 4 5 6 7 8 9]

上面的代码使用了arange()函数创建了一个从0到9的NumPy数组,步长为1。

通过linspace函数创建数组

NumPy中的linspace()函数可以创建一维等差数组,它的第一个参数是数组的起始点,第二个参数是结束点,第三个参数是数组中元素的数量。

import numpy as np 

arr1 = np.linspace(0, 10, 11)

print(arr1)

# output: [ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]

上述代码中的第三个参数是11,表示希望创建11个元素的数组。输出结果可见,linspace()函数生成了一个元素值从0到10的数组,其中有11个元素。

NumPy数组的操作

NumPy数组的属性

NumPy数组具有很多有用的属性,让我们来了解一下:

形状(Shape)

数组的形状指的是数组中元素的数量和每个维度中的元素数量。可以通过shape属性来获得数组的形状,例如:

import numpy as np 

arr1 = np.array([[1, 2, 3], [4, 5, 6]])

print(arr1.shape)

# output: (2, 3)

在上面的示例中,arr1是一个两行三列的二维数组。因此,打印数组的形状时,输出结果为(2, 3)。

大小(Size)

数组的大小是指数组中元素的总数,可以通过size属性来获得数组的大小。例如:

import numpy as np 

arr1 = np.array([[1, 2, 3], [4, 5, 6]])

print(arr1.size)

# output: 6

在上面的示例中,arr1是一个两行三列的二维数组。因此,打印数组的大小时,输出结果为6。

维度(Dimension)

数组的维度是指数组中元素的层级数目。例如,一个二维数组的维度为2,一个三维数组的维度为3。可以通过ndim属性来获得数组的维度,例如:

import numpy as np 

arr1 = np.array([[1, 2, 3], [4, 5, 6]])

print(arr1.ndim)

# output: 2

在上面的示例中,arr1是一个两行三列的二维数组。因此,打印数组的维度时,输出结果为2。

NumPy数组之间的运算

NumPy数组支持各种基本数学运算,例如加、减、乘、除、平方等。这些运算有一个共同点,就是其针对数组中每个元素进行计算。例如:

import numpy as np 

arr1 = np.array([1, 2, 3])

arr2 = np.array([4, 5, 6])

arr3 = arr1 + arr2

print(arr3)

# output: [5 7 9]

在上面的示例中,我们首先创建了两个包含三个元素的一维数组arr1arr2,然后执行arr1 + arr2运算,并将运算结果保存到arr3中。

NumPy数组的应用

科学计算和数据分析

NumPy的主要用途是支持科学计算和数据分析。NumPy的数组处理能力非常强大,它可以让我们对大型数据集进行快速的处理和分析。一些流行的数据分析和科学计算库,例如Pandas、SciPy、Scikit-learn等都是基于NumPy数组构建的。

下面是一个使用NumPy数组进行简单线性回归的例子:

import numpy as np 

import matplotlib.pyplot as plt

# 构建一些随机数据

x = np.array([1, 2, 3, 4, 5])

y = np.array([3, 4, 2, 4, 5])

# 使用NumPy的polyfit函数进行线性回归拟合

coeffs = np.polyfit(x, y, 1)

slope = coeffs[0]

intercept = coeffs[1]

polynomial = np.poly1d(coeffs)

# 绘制数据和拟合直线

plt.scatter(x, y)

plt.plot(x, polynomial(x))

plt.show()

机器学习

NumPy也是机器学习中的重要组件之一。机器学习算法通常需要大量的矩阵运算和数据集处理。NumPy的高效数组处理能力使得其可用于实现各种机器学习算法。

这里是一个使用NumPy构建简单神经网络分类器的示例:

import numpy as np 

# 定义sigmoid函数

def sigmoid(x):

return 1 / (1 + np.exp(-x))

# 构建样本数据

X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])

y = np.array([[0], [1], [1], [0]])

# 初始化权重

synapse_0 = 2 * np.random.random((2, 3)) - 1

synapse_1 = 2 * np.random.random((3, 1)) - 1

# 训练神经网络

for i in range(60000):

# 前向传播

layer_0 = X

layer_1 = sigmoid(np.dot(layer_0, synapse_0))

layer_2 = sigmoid(np.dot(layer_1, synapse_1))

# 计算误差

layer_2_error = y - layer_2

# 反向传播

layer_2_delta = layer_2_error * (layer_2 * (1 - layer_2))

layer_1_error = np.dot(layer_2_delta, synapse_1.T)

layer_1_delta = layer_1_error * (layer_1 * (1 - layer_1))

# 更新权重

synapse_1 += np.dot(layer_1.T, layer_2_delta)

synapse_0 += np.dot(layer_0.T, layer_1_delta)

# 输出预测结果

print(layer_2)

在上面的示例中,我们使用NumPy创建样本数据,然后初始化权重。接下来,我们进行了60000次训练,并通过前向传播和反向传播来更新权重。最终,我们得到了一个简单神经网络分类器,可以使用它来进行二元分类。

结论

本文介绍了Python中的NumPy库,以及如何使用NumPy数组进行科学计算和数据分析。我们还了解了NumPy数组的定义和创建方式、属性及各种常见的运算。最后,我们使用NumPy构建了一个线性回归模型和一个简单的神经网络分类器,这两个示例展示了NumPy在科学计算和机器学习中的应用。

后端开发标签