引入:
上次我们了解了Numpy操作的对象是Ndarray数组,并学习了一些Numpy数组的基本属性。实际上,Numpy的基本思想就是面向数组编程,在数据处理中,我们往往需要对某一行或列进行处理,这时就需要用Numpy提取为Ndarray对象进行处理。现在让我们真正开始Numpy的学习,就像我们学习大多数语言那样,我们该如何创建出一个对象?这就是本节的重点,Numpy创建数组。
numpy.empty
numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组,我们有如下三个参数可供选择:
参数 | 描述 |
---|---|
shape | 数组形状 |
dtype | 数据类型,可选 |
order | 有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。 |
现在让我们创建一个数组!
import numpy as np
x = np.empty([3,2], dtype = int)
print (x)
得到:
[[ 0 1072693248]
[ 0 1073741824]
[ 0 1074266112]]
numpy.zeros
numpy.zeros用来创建指定大小的数组,数组元素以 0 来填充。
我们来看以下三个例子,这三个例子更加有助于我们了解方法的参数列表.
# 默认为浮点数
x = np.zeros(5)
print(x)
# 设置类型为整数
y = np.zeros((5,), dtype = np.int)
print(y)
# 自定义类型
z = np.zeros((2,2), dtype = [('x', 'i4'), ('y', 'i4')])
print(z)
这三个结果分别是:
[0. 0. 0. 0. 0.]
[0 0 0 0 0]
[[(0, 0) (0, 0)]
[(0, 0) (0, 0)]]
另一个简洁的例子:
z = np.zeros((2,2))
print(z)
得到:
[[0. 0.]
[0. 0.]]
numpy.ones
numpy.ones同上述方法,它返回的均是1.
# 默认为浮点数
x = np.ones(5)
print(x)
# 自定义类型
x = np.ones([2,2], dtype = int)
print(x)
返回:
[1. 1. 1. 1. 1.]
[[1 1]
[1 1]]
Numpy 创建标准正态分布数组
在机器学习中,我们经常需要数据保持标准正态分布,Nmupy给我们提供了一个可以创建符合正态分布标准的数组。
from numpy import *
a=random.randint(100,200,(3,3))
print(a)
这个数组为:
[[122 108 183]
[151 101 108]
[145 102 133]]
总结:
通过上述几个方法,你现在一定已经学会了最基本创建数组的方法,接下来我们将学习如何从已有的数组创建新的数组。
NumPy 从已有的数组创建数组numpy.asarray
numpy中的asarray方法可以将Python中的各种原始类型转换为numpy中的ndarray数组类型。
参数列表如下:
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)
得到新的ndarray数组:
[1 2 3]
numpy.frombuffer
numpy.frombuffer 用于实现动态数组。
numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
注意:buffer 是字符串的时候,Python3 默认 str 是 Unicode 类型,所以要转成 bytestring 在原 str 前加上 b。
参数 描述 buffer 可以是任意对象,会以流的形式读入。 dtype 返回数组的数据类型,可选 count 读取的数据数量,默认为-1,读取所有数据。 offset 读取的起始位置,默认为0。
可以用来读入字符串并将其转换为ndarray数组类型:
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 对象,返回一维数组。
# 使用 range 函数创建列表对象
list=range(5)
it=iter(list)
# 使用迭代器创建 ndarray
x=np.fromiter(it, dtype=float)
print(x)
返回结果:
[0. 1. 2. 3. 4.]
上述例子实际上是先构造一个循环到4为止的数组,迭代器就是 相当于i++的功能,随着i的不断循环,i不断自增。然后将这个数组转换为Ndarray对象。
NumPy 从数值范围创建数组接下来的三个方法将是我们在数据处理中最常使用的三种方法。
numpy.arange
根据 start 与 stop 指定的范围以及 step 设定的步长,生成一个 ndarray。
参数 | 描述 |
---|---|
start |
起始值,默认为0
|
stop |
终止值(不包含) |
step |
步长,默认为1
|
dtype |
返回ndarray 的数据类型,如果没有提供,则会使用输入数据的类型。 |
基本例子:
x = np.arange(5)
print (x)
得到结果:
[0 1 2 3 4]
设置了dtype:
x = np.arange(5, dtype = float)
print (x)
结果为浮点数:
[0. 1. 2. 3. 4.]
设置了起始值、终止值及步长:
x = np.arange(10,20,2)
print (x)
结果为从10开始,到20结束(不包括20),间隔为2的ndarray类型数组:
[10 12 14 16 18]
numpy.linspace
numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:
a = np.linspace(1,10,10)
设置元素全部是1的等差数列:
a = np.linspace(1,1,10)
将 endpoint 设为 false,不包含终止值:
a = np.linspace(10, 20, 5, endpoint = False)
如果将 endpoint 设为 true,则会包含 20。
以下实例设置间距。
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.]]
numpy.logspace
numpy.logspace 函数用于创建一个于等比数列。格式如下:
# 默认底数是 10
a = np.logspace(1.0, 2.0, num = 10)
设置底数为2
a = np.logspace(0,9,10,base=2)
b57e7fe1d396 5 月前
69420dc3c780 5 月前