昨天我们提到array可以处理单类型数组,做到节能高效。
今天就是numpy处理高效数组
import numpy as np
np.array(range(10))
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.array可传递两个参与,一个是要处理的列表,另外一个是制定处理成什么类型
np.array(range(10),dtype=float)
array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
NumPy 要求数组必须包含同一类型的数据。如果类型不匹配,NumPy 将会向上转换(如果可行)。
NumPy 数组可以被指定为多维的
np.array([range(i, i + 3) for i in [2, 4, 6]])
array([[2, 3, 4],
[4, 5, 6],
[6, 7, 8]])
用 NumPy 内置的方法从头创建数组是一种更高效的方法。
创建一个长度为10的数组,且每个值都为0
np.zeros(10,dtype = int)
创建一个35的浮点型数组,且每个值都为1
np.ones((35),dtype = float)
不要看到zero生成的都是0,one生成的都是1就想还有two,three等。尝试后便知道我们还年轻。仅仅有这两个方法而已。
上面难道只能生成一个0的或1的数组吗,这样岂不是太单调,所以还有另外的函数,full(),他可以生成一个任意值得数组。
例如,生成一个35的数组,且值都为3.14
np.full((35),3.14)
另外还有一个函数类似于range().他的功能比range强大那么一下下,就是可以指定步长,这就是arange()
例如,生成一个1-10的数组,且要间隔2
np.arange(1,10,2)
Out[31]: array([1, 3, 5, 7, 9])
In[16]: # 创建一个5个元素的数组,这5个数均匀地分配到0~1,用函数linspace, 我是怎么理解这个函数的呢,我拆成了3块,一块是l,我理解我list, in 则就是in咯,space, 则代表空间,即在这个范围内。
np.linspace(0, 1, 5)
Out[32]: array([0. , 0.25, 0.5 , 0.75, 1. ])
下面的可能需要死记硬背下,如果您有好的理解,留言让我学习下。
In[17]: # 创建一个3×3的、在0~1均匀分布的随机数组成的数组
np.random.random((3, 3))
Out[17]: array([[ 0.99844933, 0.52183819, 0.22421193],
[ 0.08007488, 0.45429293, 0.20941444],
[ 0.14360941, 0.96910973, 0.946117 ]])
In[18]: # 创建一个3×3的、均值为0、方差为1的
正态分布的随机数数组
np.random.normal(0, 1, (3, 3))
Out[18]: array([[ 1.51772646, 0.39614948, -0.10634696],
[ 0.25671348, 0.00732722, 0.37783601],
[ 0.68446945, 0.15926039, -0.70744073]])
In[19]: # 创建一个3×3的、[0, 10)区间的随机整型数组
np.random.randint(0, 10, (3, 3))
Out[19]: array([[2, 3, 4],
[5, 7, 8],
[0, 5, 0]])
In[20]: # 创建一个3×3的单位矩阵
np.eye(3)
Out[20]: array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
In[21]: # 创建一个由3个整型数组成的未初始化的数组
数组的值是内存空间中的任意值
np.empty(3)
Out[21]: array([ 1., 1., 1.])
Numpy数组包含同一类型的值,制定类型有三种方式
一个是以字符串形式 np.array(range(10),dtype = 'int')
第二个是直接类型 np.array(range(10),dtype = int)
第三个则是引用型 np.array(range(10),dtype = np.int)
以上三种的int ,其实默认走的是 np.int_,可同样操作的还有bool类型。
其他numpy类型,参见图片吧,不手敲了。
numpy.png
网友评论