介绍:
NumPy中的数组是一种高效的多维数组对象,通常称为ndarray(N-dimensional array),用于存储和操作大量数据。以下是关于NumPy数组的一些基本信息:
创建方法:可以通过传递一个Python列表并使用np.array()函数来创建NumPy数组。这个数组可以是一维的,也可以是多维的。
数据类型:在创建数组时,可以指定数据类型,如整型、浮点型或复数型等。这有助于确保数组中的数据具有一致的类型,从而提高数据处理的效率和准确性。
属性:NumPy数组具有形状(shape)、数据类型(dtype)和维度(ndim)等属性,这些属性描述了数组的结构特征。
操作:NumPy提供了丰富的数组操作功能,包括数学运算、逻辑运算、数组变形、切片和索引等,这些都是在进行科学计算和数据分析时非常有用的功能。
性能:由于NumPy底层是用C语言编写的,因此它的数组操作速度非常快,尤其是在处理大型数据集时,性能优势明显。
应用:NumPy数组广泛应用于机器学习、图像处理、信号处理等领域,是Python科学计算生态系统中的核心组件之一。
内存管理:NumPy数组在内存中是连续存储的,这意味着它们可以直接访问内存地址,从而进一步提高了数据处理的速度。
兼容性:NumPy数组与许多其他Python库兼容良好,例如Pandas、Matplotlib和SciPy等,这使得它成为数据分析和科学计算中不可或缺的工具。
广播:NumPy支持广播功能,允许在不同形状的数组之间进行操作,这大大简化了复杂数学运算的实现。
通用函数:NumPy还提供了一系列通用函数(ufuncs),这些函数可以对数组中的每个元素进行操作,而不需要编写循环。
了解和掌握NumPy数组的使用对于进行高效的科学计算和数据分析是非常重要的。通过学习和实践,你可以更好地利用NumPy的强大功能来解决各种计算问题。
1、NumPy 从已有的数组创建数组
本章节我们将学习如何从已有的数组创建数组。
numpy.asarray
numpy.asarray 类似 numpy.array,但 numpy.asarray 参数只有三个,比 numpy.array 少两个。
numpy.asarray(a, dtype = None, order = None)
参数说明:
实例
将列表转换为 ndarray:
import numpy as np
x = [1,2,3]
a = np.asarray(x)
print (a)
输出结果为:
[1 2 3]
将元组转换为 ndarray:
import numpy as np
x = (1,2,3)
a = np.asarray(x)
print (a)
输出结果为:
[1 2 3]
将元组列表转换为 ndarray:
import numpy as np
x = [(1,2,3),(4,5)]
a = np.asarray(x)
print (a)
输出结果为:
[(1, 2, 3) (4, 5)]
设置了 dtype 参数:
import numpy as np
x = [1,2,3]
a = np.asarray(x, dtype = float)
print (a)
输出结果为:
[ 1. 2. 3.]
numpy.frombuffer
numpy.frombuffer 用于实现动态数组。
numpy.frombuffer 接受 buffer 输入参数,以流的形式读入转化成 ndarray 对象。
numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
注意:buffer 是字符串的时候,Python3 默认 str 是 Unicode 类型,所以要转成 bytestring 在原 str 前加上 b。
参数说明:
import numpy as np
s = b'Hello World'
a = np.frombuffer(s, dtype = 'S1')
print (a)
输出结果为:
[b'H' b'e' b'l' b'l' b'o' b' ' b'W' b'o' b'r' b'l' b'd']
import numpy as np
s = 'Hello World'
a = np.frombuffer(s, dtype = 'S1')
print (a)
输出结果为:
['H' 'e' 'l' 'l' 'o' ' ' 'W' 'o' 'r' 'l' 'd']
1.1 、numpy.fromiter
numpy.fromiter 方法从可迭代对象中建立 ndarray 对象,返回一维数组。
numpy.fromiter(iterable, dtype, count=-1)
import numpy as np
# 使用 range 函数创建列表对象
list=range(5)
it=iter(list)
# 使用迭代器创建 ndarray
x=np.fromiter(it, dtype=float)
print(x)
输出结果为:
[0. 1. 2. 3. 4.]
2、 NumPy 从数值范围创建数组
这一章节我们将学习如何从数值范围创建数组。
2.1numpy.arange
numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下:
numpy.arange(start, stop, step, dtype)
根据 start 与 stop 指定的范围以及 step 设定的步长,生成一个 ndarray。
参数说明:
实例
生成 0 到 4 长度为 5 的数组:
mport numpy as np
x = np.arange(5)
print (x)
输出结果如下:
[0 1 2 3 4]
设置返回类型位 float:
import numpy as np
# 设置了 dtype
x = np.arange(5, dtype = float)
print (x)
输出结果如下:
[0. 1. 2. 3. 4.]
设置了起始值、终止值及步长:
import numpy as np
x = np.arange(10,20,2)
print (x)
输出结果如下:
[10 12 14 16 18]
2.2、numpy.linspace
numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数说明:
以下实例用到三个参数,设置起始点为 1 ,终止点为 10,数列个数为 10。
import numpy as np
a = np.linspace(1,10,10)
print(a)
输出结果为:
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
设置元素全部是1的等差数列:
import numpy as np
a = np.linspace(1,1,10)
print(a)
输出结果为:
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
将 endpoint 设为 false,不包含终止值:
import numpy as np
a = np.linspace(10, 20, 5, endpoint = False)
print(a)
输出结果为:
[10. 12. 14. 16. 18.]
如果将 endpoint 设为 true,则会包含 20。
以下实例设置间距。
import numpy as np
a =np.linspace(1,10,10,retstep= True)
print(a)
# 拓展例子
b =np.linspace(1,10,10).reshape([10,1])
print(b)
输出结果为:
(array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]), 1.0)
[[ 1.]
[ 2.]
[ 3.]
[ 4.]
[ 5.]
[ 6.]
[ 7.]
[ 8.]
[ 9.]
[10.]]
2.3、numpy.logspace
numpy.logspace 函数用于创建一个于等比数列。格式如下:
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
base 参数意思是取对数的时候 log 的下标。
import numpy as np
# 默认底数是 10
a = np.logspace(1.0, 2.0, num = 10)
print (a)
输出结果为:
[ 10. 12.91549665 16.68100537 21.5443469 27.82559402
35.93813664 46.41588834 59.94842503 77.42636827 100. ]
将对数的底数设置为 2 :
import numpy as np
a = np.logspace(0,9,10,base=2)
print (a)
输出结果
[ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.]