首页 » SEO优化 » php获取数组主键技巧_NumPyPython库数组的排序与搜索技能教程

php获取数组主键技巧_NumPyPython库数组的排序与搜索技能教程

访客 2024-11-18 0

扫一扫用手机浏览

文章目录 [+]

pip install numpy

一旦安装完成,你可以在Python脚本中通过以下语句导入NumPy库:

php获取数组主键技巧_NumPyPython库数组的排序与搜索技能教程

import numpy as np

php获取数组主键技巧_NumPyPython库数组的排序与搜索技能教程
(图片来自网络侵删)

这里我们常日将NumPy导入为np,这是一个约定俗成的简写,便于后续代码中利用。

2. NumPy数组的基本操作

NumPy的核心是ndarray工具,这是一个多维数组工具,非常适宜进行数值打算。
下面我们将通过一些基本操作来熟习NumPy数组。

2.1 创建数组

创建NumPy数组最大略的方法是利用numpy.array()函数。
例如,我们可以创建一个一维数组:

import numpy as np# 创建一个一维数组arr = np.array([1, 2, 3, 4, 5])print(arr)

输出:

array([1, 2, 3, 4, 5])

我们也可以创建一个二维数组:

# 创建一个二维数组arr_2d = np.array([[1, 2, 3], [4, 5, 6]])print(arr_2d)

输出:

array([[1, 2, 3],[4, 5, 6]])

2.2 数组的索引和切片

NumPy数组支持索引和切片操作,这使得我们可以轻松地访问和操作数组中的元素。
例如,我们可以从一维数组中获取特定元素:

# 获取第一个元素print(arr[0])

输出:

1

对付二维数组,我们可以利用两个索引来访问元素:

# 获取第一个子数组的第二个元素print(arr_2d[0, 1])

输出:

2

切片操作许可我们获取数组的一部分:

# 获取数组的前三个元素print(arr[:3])

输出:

array([1, 2, 3])

对付二维数组,我们可以利用切片来获取子数组:

# 获取第二个子数组print(arr_2d[1, :])

输出:

array([4, 5, 6])

2.3 数组的形状和重塑

NumPy数组的形状可以通过shape属性获取,这将返回一个表示数组维度的元组。
例如:

# 获取数组的形状print(arr.shape)print(arr_2d.shape)

输出:

(5,)(2, 3)

我们还可以利用reshape方法来改变数组的形状,只要新的形状与原数组的元素数量相匹配:

# 将一维数组重塑为二维数组arr_reshaped = arr.reshape((5, 1))print(arr_reshaped)

输出:

array([[1],[2],[3],[4],[5]])

2.4 数组的数学操作

NumPy数组支持各种数学操作,包括加、减、乘、除等。
这些操作可以运用于全体数组,也可以运用于数组的元素级操作。
例如:

# 创建两个一维数组arr1 = np.array([1, 2, 3])arr2 = np.array([4, 5, 6])# 元素级相加print(arr1 + arr2)

输出:

array([5, 7, 9])

我们还可以利用NumPy的内置函数进行更繁芜的数学操作,如求和、均匀值、最大值和最小值:

# 求和print(np.sum(arr1))# 均匀值print(np.mean(arr1))# 最大值print(np.max(arr1))# 最小值print(np.min(arr1))

输出:

62.031

2.5 数组的广播机制

NumPy的广播机制许可我们对形状不完备匹配的数组进行操作。
例如,我们可以将一个标量值加到一个数组上:

# 创建一个一维数组arr = np.array([1, 2, 3])# 将标量值加到数组上print(arr + 5)

输出:

array([6, 7, 8])

我们也可以将一个一维数组与一个二维数组进行操作:

# 创建一个一维数组和一个二维数组arr1 = np.array([1, 2, 3])arr2 = np.array([[1, 2, 3], [4, 5, 6]])# 将一维数组加到二维数组上print(arr2 + arr1)

输出:

array([[2, 4, 6],[5, 7, 9]])

2.6 数组的拼接和分割

NumPy供应了concatenate和split函数来拼接和分割数组。
例如,我们可以利用concatenate函数将两个数组拼接在一起:

# 创建两个一维数组arr1 = np.array([1, 2, 3])arr2 = np.array([4, 5, 6])# 拼接数组arr_concatenated = np.concatenate((arr1, arr2))print(arr_concatenated)

输出:

array([1, 2, 3, 4, 5, 6])

我们也可以利用split函数将一个数组分割成多个数组:

# 创建一个一维数组arr = np.array([1, 2, 3, 4, 5, 6])# 将数组分割成两个arr_split = np.split(arr, 2)print(arr_split)

输出:

[array([1, 2, 3]), array([4, 5, 6])]

2.7 数组的条件操作

NumPy数组支持条件操作,这使得我们可以基于条件来操作数组。
例如,我们可以利用where函数来根据条件选择数组中的元素:

# 创建一个一维数组arr = np.array([1, 2, 3, 4, 5])# 利用where函数选择大于2的元素arr_filtered = np.where(arr > 2, arr, 0)print(arr_filtered)

输出:

array([0, 0, 3, 4, 5])

这里np.where函数的语法是np.where(condition, x, y),如果condition为真,则返回x,否则返回y。

2.8 数组的类型转换

NumPy数组可以转换为其他类型,如Python列表,也可以将其他类型转换为NumPy数组。
例如:

# 将NumPy数组转换为Python列表arr_list = arr.tolist()print(arr_list)# 将Python列表转换为NumPy数组list_to_arr = np.array([1, 2, 3])print(list_to_arr)

输出:

[1, 2, 3, 4, 5]array([1, 2, 3])

2.9 数组的随机数天生

NumPy供应了天生随机数的函数,这对付仿照和数据剖析非常有用。
例如,我们可以利用random.rand函数天生一个随机数组:

# 天生一个形状为(3, 3)的随机数组random_arr = np.random.rand(3, 3)print(random_arr)

输出将是一个3x3的数组,个中的元素是0到1之间的随机数。

2.10 数组的统计函数

NumPy供应了许多统计函数,如mean、median、std等,用于打算数组的统计量。
例如:

# 创建一个一维数组arr = np.array([1, 2, 3, 4, 5])# 打算均匀值print(np.mean(arr))# 打算中位数print(np.median(arr))# 打算标准差print(np.std(arr))

输出:

3.03.01.4142135623730951

这些基本操作只是NumPy功能的冰山一角,但它们足以让你开始利用NumPy进行数值打算和数据剖析。
随着你对NumPy的深入学习,你将能够利用其更高等的功能,如线性代数、傅立叶变换等。

NumPy(Python库):数组的排序3. 利用numpy.sort()进行排序

在NumPy中,numpy.sort()函数是一个强大的工具,用于对数组中的元素进行排序。
它不仅可以对一维数组进行排序,还可以处理多维数组,乃至可以对数组中的繁芜数据类型进行排序。

3.1 一维数组排序

import numpy as np# 创建一个一维数组arr = np.array([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5])# 利用numpy.sort()进行排序sorted_arr = np.sort(arr)print(sorted_arr)

这段代码创建了一个一维数组arr,然后利用numpy.sort()函数对其进行排序。
排序后的数组sorted_arr将按升序排列。

3.2 多维数组排序

对付多维数组,numpy.sort()可以沿特定轴进行排序。

# 创建一个二维数组arr_2d = np.array([[8, 4, 6], [1, 2, 10], [3, 7, 9]])# 沿第一轴(垂直)排序sorted_arr_2d_axis0 = np.sort(arr_2d, axis=0)# 沿第二轴(水平)排序sorted_arr_2d_axis1 = np.sort(arr_2d, axis=1)print("沿第一轴排序:\n", sorted_arr_2d_axis0)print("沿第二轴排序:\n", sorted_arr_2d_axis1)

在这个例子中,arr_2d是一个二维数组。
np.sort(arr_2d, axis=0)将沿垂直轴排序,而np.sort(arr_2d, axis=1)将沿水平轴排序。

3.3 繁芜数据类型排序

NumPy还可以对包含构造化数据类型的数组进行排序。

# 创建一个构造化数组dt = np.dtype([('name', 'S10'), ('age', int)])arr_struct = np.array([('Tom', 21), ('Jerry', 25), ('Spike', 20)], dtype=dt)# 按'age'字段排序sorted_arr_struct = np.sort(arr_struct, order='age')print(sorted_arr_struct)

这里,arr_struct是一个构造化数组,包含姓名和年事两个字段。
通过np.sort(arr_struct, order='age'),我们可以按年事字段对数组进行排序。

4. 排序算法的性能剖析

NumPy的sort()函数利用了快速排序、堆排序或归并排序算法,详细取决于数组的大小和数据类型。
对付大多数情形,NumPy的排序算法是高效的,但在处理非常大的数组时,性能剖析变得尤为主要。

4.1 性能测试

import time# 创建一个大数组large_arr = np.random.randint(0, 1000000, size=1000000)# 测试排序韶光start_time = time.time()sorted_large_arr = np.sort(large_arr)end_time = time.time()print("排序韶光:", end_time - start_time)

通过记录排序前后的系统韶光,我们可以丈量排序一个大数组所需的韶光,从而剖析numpy.sort()的性能。

5. 高等排序选项

NumPy的sort()函数供应了多种高等选项,如kind参数,用于指定排序算法;order参数,用于构造化数组的排序。

5.1 指定排序算法

# 利用堆排序sorted_arr_heap = np.sort(arr, kind='heapsort')# 利用归并排序sorted_arr_merge = np.sort(arr, kind='mergesort')# 利用快速排序sorted_arr_quick = np.sort(arr, kind='quicksort')

kind参数许可我们选择不同的排序算法。
堆排序、归并排序和快速排序各有优缺陷,选择得当的算法可以优化特定情形下的性能。

5.2 构造化数组的排序

在构造化数组中,我们可以指定按哪个字段进行排序。

# 按'name'字段排序sorted_arr_struct_name = np.sort(arr_struct, order='name')print(sorted_arr_struct_name)

通过order参数,我们可以指定按构造化数组中的哪个字段进行排序,这在处理繁芜数据时非常有用。

以上便是利用NumPy进行数组排序的详细教程,包括一维和多维数组的排序,以及构造化数组的排序方法。
通过理解和运用这些高等选项,你可以更有效地处理和剖析数据。

数组搜索6. 利用numpy.searchsorted()进行搜索

numpy.searchsorted()函数是NumPy库中用于在排序数组中查找元素插入位置的工具。
这在处理大量数据时特殊有用,由于它可以高效地确定新元素该当插入的位置,以保持数组的排序状态。

6.1 事理

numpy.searchsorted()函数通过二分查找算法来确定插入位置。
二分查找是一种在有序列表中查找特定元素的算法,其效率远高于线性查找。
该函数返回一个数组,个中包含每个元素在目标数组中该当插入的索引,以保持数组的排序。

6.2 代码示例

import numpy as np# 创建一个排序的数组sorted_array = np.array([1, 3, 4, 5, 7, 9, 11])# 要插入的元素elements = np.array([2, 6, 10])# 利用searchsorted()函数找到插入位置insert_positions = np.searchsorted(sorted_array, elements)# 输出结果print("插入位置:", insert_positions)

6.3 阐明

在上述代码中,我们首先创建了一个排序的数组sorted_array。
然后,我们定义了一个elements数组,个中包含我们想要插入的新元素。
通过调用np.searchsorted(sorted_array, elements),我们得到了一个数组insert_positions,它表示elements中的每个元素该当插入sorted_array中的位置。
在这个例子中,输出该当是[1, 4, 6],这意味着2该当插入在索引1的位置,6该当插入在索引4的位置,而10该当插入在索引6的位置。

7. 数组中的元素查找技巧

在NumPy中,除了searchsorted(),还有其他方法可以用于在数组中查找元素,特殊是当数组未排序时。

7.1 利用np.where()

np.where()函数可以用于查找数组中知足特定条件的元素的索引。
这在须要基于条件查找元素时非常有用。

7.2 代码示例

import numpy as np# 创建一个未排序的数组array = np.array([10, 2, 5, 6, 9, 1, 11])# 查找值为5的元素的索引index_of_five = np.where(array == 5)# 输出结果print("值为5的元素的索引:", index_of_five)

7.3 阐明

在这个例子中,我们利用np.where(array == 5)来查找数组中值为5的元素的索引。
np.where()函数返回一个元组,个中包含知足条件的元素的索引。
输出该当是(array([2]),), 这意味着值为5的元素位于索引2的位置。

8. 搜索排序数组的优化方法

当处理非常大的排序数组时,直策应用searchsorted()可能不是最高效的。
可以结合NumPy的其他功能,如np.bincount()和np.cumsum(),来优化搜索过程。

8.1 利用np.bincount()和np.cumsum()

np.bincount()可以用于打算数组中每个值的涌现次数,而np.cumsum()则可以打算这些计数的累积和。
结合利用这两个函数,可以快速确定一个值在数组中的位置范围,从而加速搜索过程。

8.2 代码示例

import numpy as np# 创建一个排序的数组,包含重复元素sorted_array = np.array([1, 1, 2, 2, 2, 3, 4, 4, 4, 4])# 打算每个值的涌现次数counts = np.bincount(sorted_array)# 打算累积和cumulative_sums = np.cumsum(counts)# 查找值为2的元素的起始和结束位置start_index = cumulative_sums[1] # 1是2的前一个值end_index = cumulative_sums[2] # 2的累积计数# 输出结果print("值为2的元素的起始位置:", start_index)print("值为2的元素的结束位置:", end_index)

8.3 阐明

在这个例子中,我们首先利用np.bincount(sorted_array)来打算sorted_array中每个值的涌现次数。
然后,我们利用np.cumsum(counts)来打算这些计数的累积和。
通过查找累积和中值为2的元素的前一个值和当前值的累积计数,我们可以确定值为2的元素在数组中的起始和结束位置。
在这个例子中,输出该当是起始位置为2,结束位置为5,这意味着值为2的元素位于索引2到4的位置。

通过这些方法,我们可以有效地在NumPy数组中进行搜索和元素查找,无论是对付排序还是未排序的数组,都能找到得当的办理方案。

NumPy(Python库):数组的排序与搜索 - 综合运用实例9. 排序与搜索在数据剖析中的运用

在数据剖析领域,排序和搜索是处理数据集时的常见操作。
NumPy库供应了高效的方法来对数组进行排序和搜索,这对付处理大型数据集尤其主要。
下面,我们将通过详细的代码示例来展示如何利用NumPy进行排序和搜索。

9.1 排序

NumPy的np.sort函数可以对数组进行排序。
它支持多种排序算法,包括快速排序、堆排序和稳定的排序算法。
此外,np.sort可以对多维数组进行排序,这在处理繁芜数据构造时非常有用。

示例:对一维数组进行排序

import numpy as np# 创建一个随机的一维数组data = np.random.randint(0, 100, size=10)print("原始数组:", data)# 利用np.sort进行排序sorted_data = np.sort(data)print("排序后的数组:", sorted_data)

示例:对二维数组按列排序

# 创建一个随机的二维数组data_2d = np.random.randint(0, 100, size=(10, 3))print("原始二维数组:\n", data_2d)# 按第一列排序sorted_data_2d = data_2d[data_2d[:,0].argsort()]print("按第一列排序后的二维数组:\n", sorted_data_2d)

9.2 搜索

NumPy的np.searchsorted函数可以找到一个值在已排序数组中的插入位置,而np.where函数则可以找到数组中知足特定条件的元素的索引。

示例:利用np.searchsorted

# 已排序的数组sorted_data = np.array([1, 3, 5, 7, 9])# 查找值5的插入位置index = np.searchsorted(sorted_data, 5)print("值5的插入位置:", index)# 查找值6的插入位置index = np.searchsorted(sorted_data, 6)print("值6的插入位置:", index)

示例:利用np.where

# 查找大于50的元素的索引indices = np.where(data > 50)print("大于50的元素的索引:", indices)

10. 实战案例:处理大型数据集

当处理大型数据集时,NumPy的排序和搜索功能可以显著提高数据处理的效率。
下面,我们将通过一个实战案例来展示如何利用NumPy对大型数据集进行排序和搜索。

10.1 创建大型数据集

# 创建一个10000x3的大型随机数组large_data = np.random.randint(0, 100000, size=(10000, 3))print("大型数据集的前几行:\n", large_data[:5])

10.2 对大型数据集进行排序

# 按第一列对大型数据集进行排序sorted_large_data = large_data[large_data[:,0].argsort()]print("按第一列排序后的大型数据集的前几行:\n", sorted_large_data[:5])

10.3 在大型数据集中搜索

# 查找特定值的插入位置value = 50000index = np.searchsorted(sorted_large_data[:,0], value)print("值", value, "的插入位置:", index)# 查找知足条件的元素的索引condition = sorted_large_data[:,0] > 50000indices = np.where(condition)print("知足条件的元素的索引:", indices)

通过这些示例,我们可以看到NumPy的排序和搜索功能在处理大型数据集时的高效性和灵巧性。
这些功能不仅简化了代码,还提高了数据处理的速率,是数据剖析中不可或缺的工具。

标签:

相关文章

我国土地利用分类代码的构建与应用

土地利用分类代码是我国土地管理的重要组成部分,是土地资源调查、规划、利用和保护的依据。土地利用分类代码的构建与应用显得尤为重要。本...

SEO优化 2025-02-18 阅读1 评论0

微信跳转微信支付便捷支付体验的秘密武器

移动支付已成为人们日常生活中不可或缺的一部分。作为我国领先的社交平台,微信支付凭借其便捷、安全的支付方式,深受广大用户的喜爱。而微...

SEO优化 2025-02-18 阅读0 评论0

探寻会计科目代码背后的奥秘分类与

会计科目代码是会计信息系统中不可或缺的组成部分,它将企业的经济活动进行分类和归纳,为会计核算、财务分析和决策提供重要依据。本文将从...

SEO优化 2025-02-18 阅读1 评论0