Numpy创建数组
Numpy Ndarray对象
NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
ndarray 对象是用于存放同类型元素的多维数组。
ndarray 中的每个元素在内存中都有相同存储大小的区域。
ndarray 内部由以下内容组成:
- 一个指向数据(内存或内存映射文件中的一块数据)的指针。
- 数据类型或 dtype,描述在数组中的固定大小值的格子。
- 一个表示数组形状(shape)的元组,表示各维度大小的元组。
- 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。
跨度可以是负数,这样会使数组在内存中后向移动,切片中 obj[::-1] 或 obj[:,::-1] 就是如此。
创建数组(创建一个ndarray)
numpy.array
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndim = 0)
参数说明:
名称描述object数组或嵌套的数列dtype数组元素的数据类型,可选copy对象是否需要复制,可选order创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)subok默认返回一个与基类类型一致的数组ndmin指定生成数组的最小维度
import numpy as np
a = np.array([1,2,3])
print (a)
#结果# [1, 2, 3]
# 多于一个维度
import numpy as np
a = np.array([[1, 2], [3, 4]])
print (a)
#结果#
[[1, 2]
[3, 4]]
# 最小维度
import numpy as np
a = np.array([1,2,3,4,5], ndmin = 2)
print (a)
#结果# [[1, 2, 3, 4, 5]]
# dtype 参数
import numpy as np
a = np.array([1, 2, 3], dtype = complex)
print (a)
#结果# [ 1.+0.j, 2.+0.j, 3.+0.j]
从已有的数组创建数组
numpy.asarray
numpy.asarray 类似 numpy.array,但 numpy.asarray 的参数只有三个,比 numpy.array 少两个。
numpy.asarray(a, dtype = None, order = None)
参数说明:
参数描述a任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组dtype数据类型,可选order可选,有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。
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。
参数说明:
参数描述buffer可以是任意对象,会以流的形式读入。dtype返回数组的数据类型,可选count读取的数据数量,默认为-1,读取所有数据。offset读取的起始位置,默认为0。
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']
numpy.fromiter
numpy.fromiter 方法从可迭代对象中建立 ndarray 对象,返回一维数组
numpy.fromiter(iterable, dtype, count=-1)
参数说明:
参数描述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.]
NumPy 从数值范围创建数组
numpy.arange
numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下:
numpy.arange(start, stop, step, dtype)
根据 start 与 stop 指定的范围以及 step 设定的步长,生成一个 ndarray。
参数说明:
参数描述
start
起始值,默认为0
stop
终止值(不包含)step
步长,默认为1
dtype
返回ndarray
的数据类型,如果没有提供,则会使用输入数据的类型。
生成0到5的数组
import numpy as np
x = np.arange(5)
print(x)
#结果# [0 1 2 3 4]
设置返回值的类型为float
import numpy as np
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]
numpy.linspace
numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数说明:
参数描述
start
序列的起始值stop
序列的终止值,如果endpoint
为true
,该值包含于数列中num
要生成的等步长的样本数量,默认为50
endpoint
该值为ture
时,数列中中包含stop
值,反之不包含,默认是True。retstep
如果为 True 时,生成的数组中会显示间距,反之不显示。dtype
ndarray
的数据类型
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)
#结果# (array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]), 1.0)
#拓展例子
b = np.linspace(1, 10 ,10).reshape([10, 1])
#结果#
[[ 1.]
[ 2.]
[ 3.]
[ 4.]
[ 5.]
[ 6.]
[ 7.]
[ 8.]
[ 9.]
[10.]]
numpy.logspace
numpy.logspace 函数用于创建一个于等比数列。格式如下:
numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
base 参数意思是取对数的时候 log 的下标。
参数说明:
参数描述
start
序列的起始值为:base ** startstop
序列的终止值为:base ** stop。如果endpoint
为true
,该值包含于数列中num
要生成的等步长的样本数量,默认为50
endpoint
该值为ture
时,数列中中包含stop
值,反之不包含,默认是True。base
对数 log 的底数。dtype
ndarray
的数据类型
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.]