【Numpy】数组的创建和常用函数(排序、连接、属性、reshape、索引和切片)

简介: 【Numpy】数组的创建和常用函数(排序、连接、属性、reshape、索引和切片)

1 安装Numpy与导入


如果您已经拥有Python,则可以使用以下命令安装NumPy:

conda install numpy


pip install numpy


如果你还没有Python,你可能需要考虑使用Anaconda。这是最简单的入门方法。获得此发行版的好处是,您无需太担心单独安装NumPy或您将用于数据分析的任何主要软件包,例如pandas,Scikit-Learn等。


访问NumPy及其函数,请将其导入Python代码,如下所示:

import numpy as np


我们将导入的名称缩短,以便使用NumPy提高代码的可读性。这是一个被广泛采用的约定,您应该遵循该约定,以便使用您的代码的任何人都可以轻松理解它。


2 数组


2.1 数组概念

您可能偶尔会听到一个称为“ndarray”的数组,它是“N维数组”的简写。N 维数组只是具有任意多个维度的数组。您可能还会听到 1-D、一维数组、2-D 或二维数组等。NumPy 类用于表示矩阵和向量。向量是具有单个维度的数组(行向量和列向量之间没有区别),而矩阵是指具有两个维度的数组。对于 3-D 或更高维数组,术语张量也常用


数组通常是相同类型和大小的项的固定大小的容器。数组中维度和项的数量由其形状定义。数组的形状是指定每个维度大小的非负整数的元组。


下面用一个二维数组举例:

[[0., 0., 0.],
 [1., 1., 1.]]


一般用axis(轴)来描述,这个数组第一个轴的长度为2,第二个轴的长度为3.


就像在其他Python容器对象中一样,可以通过索引或切片数组来访问和修改数组的内容。与典型的容器对象不同,不同的数组可以共享相同的数据,因此对一个数组所做的更改可能在另一个数组中可见。


2.2 Python中列表与Numpy数组的区别

NumPy为您提供了大量快速有效的方法来创建数组并操作其中的数字数据。虽然Python列表可以在单个列表中包含不同的数据类型,但NumPy数组中的所有元素都应该是同构的。如果数组不是同构的,则要对数组执行的数学运算将非常低效。


为什么使用NumPy?


NumPy数组比Python列表更快,更紧凑。数组消耗较少的内存,并且易于使用。NumPy使用更少的内存来存储数据,它提供了一种指定数据类型的机制。这允许进一步优化代码。


3 数组创建


3.1 np.array()

创建一个简单的一维数组数组所需要做的就是向它传递一个列表。如果选择这样做,还可以指定列表中的数据类型。

>>> import numpy as np
>>> a = np.array([1, 2, 3])

image.png


二维数组创建也类似

np.array([list1],[list2],...)


3.2 np.zeros()&np.ones

除了从一系列元素创建数组之外,您还可以轻松创建一个填充有0的数组.

>>> np.zeros(2)
array([0., 0.])


或者一个填充有1的数组.

>>> np.ones(2)
array([1., 1.])


3.3 np.empty()

该函数创建一个数组,其初始内容是随机的,并且取决于内存的状态。

# 创建一个具有两个元素的数组
>>> np.empty(2)  
array([3.14, 42.  ])


3.4 np.arrange()与np.linspace()

  • np.arrange()
>>> np.arange(4)
array([0, 1, 2, 3])


生成一个从0开始,具有4个元素(即0,1,2,3)的数组

>>> np.arange(2, 9, 2)
array([2, 4, 6, 8])


参数1:指定第一个数字

参数2:指定第二个数字

参数3:步长


  • np.linspace()

这个函数指定间隔内的值的个数来创建数组,见下方示例:

>>> np.linspace(0, 10, num=5)
array([ 0. ,  2.5,  5. ,  7.5, 10. ])


4 更多常用操作


4.1 排序np.sort()

您可以使用以下命令按升序快速对数字进行排序:

>>> arr = np.array([2, 1, 5, 3, 7, 4, 6, 8])
>>> np.sort(arr)
array([1, 2, 3, 4, 5, 6, 7, 8])


除了返回数组的排序副本的 sort 之外,还可以一些可以使用的高阶操作:

  • argsort,它是沿指定轴的间接排序,
  • lexsort,这是对多个键的间接稳定排序,
  • searchsorted,它将在排序数组中查找元素,以及
  • partition这是一种部分排序。


4.2 连接np.concatenate()

>>> a = np.array([[1, 2], [3, 4]])
>>> b = np.array([[5, 6]])
>>> np.concatenate((a, b), axis=0)
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> np.concatenate((a, b.T), axis=1)
array([[1, 2, 5],
       [3, 4, 6]])
>>> np.concatenate((a, b), axis=None)
array([1, 2, 3, 4, 5, 6])


4.3 查看数组的属性

ndarray.ndim将告诉您数组的轴数或尺寸。

ndarray.size将告诉您数组的元素总数。这是数组形状的元素的乘积。

ndarray.shape将显示一个整数元组,指示沿数组的每个维度存储的元素数。例如,如果您有一个包含 2 行和 3 列的二维数组,则数组的形状为 。

例如,如果创建此数组:

>>> array_example = np.array([[[0, 1, 2, 3],
                           [4, 5, 6, 7]],
                          [[0, 1, 2, 3],
                           [4, 5, 6, 7]],
                          [[0 ,1 ,2, 3],
                           [4, 5, 6, 7]]])


要查找数组的维数,运行:

>>> array_example.ndim
3


要查找数组中元素的总数,运行:

>>> array_example.size
24


要找到数组的形状,运行:

>>> array_example.shape
(3, 2, 4)


4.4 重塑一个数组

reshape方法将为数组提供新形状,而无需更改数据。请记住,当您使用 reshape 方法时,要生成的数组需要具有与原始数组相同数量的元素。如果从包含 12 个元素的数组开始,则需要确保新数组总共包含 12 个元素。

>>> a = np.arange(6)
>>> a
array([0, 1, 2, 3, 4, 5])
>>> a.reshape((3, 2))
array([[0, 1],
       [2, 3],
       [4, 5]])


4.5 索引与切片

Numpy中的索引与切片和Python列表中的类似。

>>> data = np.array([1, 2, 3])
>>> data[1]
2
>>> data[0:2]
array([1, 2])
>>> data[1:]
array([2, 3])
>>> data[-2:]
array([2, 3])


下图是上方代码操作对应的可视化图,数组的索引是从0开始,选取元素遵循左闭右开。

image.png

如果想要获取数组的一部分或特定数组元素,以便在进一步分析或其他操作中使用。为此,您需要对数组进行子集化、切片或索引。


例如,如果从以下数组开始:

>>> a = np.array([[1 , 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])


您可以轻松打印数组中小于 5 的所有值。

>>> print(a[a < 5])
[1 2 3 4]


例如,还可以选择等于或大于 5 的数字,并使用该条件为数组编制索引。

>>> five_up = (a >= 5)
>>> print(a[five_up])
[ 5  6  7  8  9 10 11 12]


您可以选择可被 2 整除的元素:

>>> divisible_by_2 = a[a%2==0]
>>> print(divisible_by_2)
[ 2  4  6  8 10 12]


或者,您可以使用 and 运算符选择满足两个条件的元素:&,|

>>> c = a[(a > 2) & (a < 11)]
>>> print(c)
[ 3  4  5  6  7  8  9 10]


您还可以使用逻辑运算符 &|,以便返回指定数组中的值是否满足特定条件的布尔值。这对于包含名称或其他分类值的数组非常有用。

>>> five_up = (a > 5) | (a == 5)
>>> print(five_up)
[[False False False False]
 [ True  True  True  True]
 [ True  True  True True]]
目录
相关文章
|
2月前
|
Python
NumPy 教程 之 NumPy 统计函数 9
NumPy提供了多种统计函数,如计算数组中的最小值、最大值、百分位数、标准差及方差等。其中,标准差是一种衡量数据平均值分散程度的指标,它是方差的算术平方根。例如,对于数组[1,2,3,4],其标准差可通过计算各值与均值2.5的差的平方的平均数的平方根得出,结果为1.1180339887498949。示例代码如下: ```python import numpy as np print(np.std([1,2,3,4])) ``` 运行输出即为:1.1180339887498949。
118 50
|
1月前
|
Python
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
NumPy库中的`np.concatenate`和`np.append`函数,它们分别用于沿指定轴拼接多个数组以及在指定轴上追加数组元素。
27 0
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
|
2月前
|
Python
NumPy 教程 之 NumPy 统计函数 10
NumPy统计函数,包括查找数组中的最小值、最大值、百分位数、标准差和方差等。方差表示样本值与平均值之差的平方的平均数,而标准差则是方差的平方根。例如,`np.var([1,2,3,4])` 的方差为 1.25。
101 48
|
2月前
|
机器学习/深度学习 搜索推荐 算法
NumPy 教程 之 NumPy 排序、条件筛选函数 8
NumPy提供了多种排序方法,包括快速排序、归并排序及堆排序,各有不同的速度、最坏情况性能、工作空间和稳定性特点。此外,NumPy还提供了`numpy.extract()`函数,可以根据特定条件从数组中抽取元素。例如,在一个3x3数组中,通过定义条件选择偶数元素,并使用该函数提取这些元素。示例输出为:[0., 2., 4., 6., 8.]。
26 8
|
2月前
|
机器学习/深度学习 搜索推荐 算法
NumPy 教程 之 NumPy 排序、条件筛选函数 2
介绍NumPy` 中的排序方法与条件筛选函数。通过对比快速排序、归并排序及堆排序的速度、最坏情况性能、工作空间需求和稳定性,帮助读者选择合适的排序算法。此外,还深入讲解了 `numpy.argsort()` 的使用方法,并通过具体实例展示了如何利用该函数获取数组值从小到大的索引值,并据此重构原数组,使得其变为有序状态。对于学习 `NumPy` 排序功能来说,本教程提供了清晰且实用的指导。
33 7
|
2月前
|
机器学习/深度学习 搜索推荐 算法
NumPy 教程 之 NumPy 排序、条件筛选函数 5
NumPy中的排序方法及特性对比,包括快速排序、归并排序与堆排序的速度、最坏情况性能、工作空间及稳定性分析。并通过`numpy.argmax()`与`numpy.argmin()`函数演示了如何获取数组中最大值和最小值的索引,涵盖不同轴方向的操作,并提供了具体实例与输出结果,便于理解与实践。
23 4
|
2月前
|
算法 索引 Python
Numpy 的一些以 arg 开头的函数
Numpy 的一些以 arg 开头的函数
42 0
|
2月前
|
机器学习/深度学习 搜索推荐 算法
NumPy 教程 之 NumPy 排序、条件筛选函数 4
NumPy提供了多种排序方法,包括快速排序、归并排序及堆排序等,具有不同的执行速度、最坏情况性能、工作空间需求及稳定性特征。教程涵盖了`msort`、`sort_complex`、`partition`和`argpartition`等函数的使用方法,并通过实例展示了复数排序与分区排序的应用。例如,`np.sort_complex()`用于复数排序,`np.partition()`实现基于指定位置的分区排序,而`argpartition()`则帮助快速找到数组中的特定值。
12 0
|
2月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
76 0
|
3月前
|
机器学习/深度学习 数据处理 计算机视觉
NumPy实践宝典:Python高手教你如何轻松玩转数据处理!
【8月更文挑战第22天】NumPy是Python科学计算的核心库,专长于大型数组与矩阵运算,并提供了丰富的数学函数。首先需安装NumPy (`pip install numpy`)。之后可通过创建数组、索引与切片、执行数学与逻辑运算、变换数组形状及类型、计算统计量和进行矩阵运算等操作来实践学习。NumPy的应用范围广泛,从基础的数据处理到图像处理都能胜任,是数据科学领域的必备工具。
58 0