python定义numpy数组_Numpy数组的创建及其属性
在《Python Numpy基础:多维数组ndarray对象》我们对 ndarray 数组对象有了基本的认识,ndarray 数组由数据本⾝以及描述性元数据构成,且分开存放,从⽽减少对数据本⾝的访问频率,进⽽优化了效率,ndarray 数组,也可以称为 Numpy 数组,该数组所有的数据类型必相同,即具有同质性;且数组的下标也是从 0 开始的。
在上⼀节中⼤多数情况下是⽣成的是随机数组但是这与我们的主观能动性不符,那么如何创建⼀个 Numpy 数组呢,在本节我们将介绍⼏种创建数组的⽅法。
1. Numpy 数组的创建⽅法
1)np.array()
这是最基本的数组构建⽅法, 它的完整⽅法如下所⽰:
numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
对于上⾯的参数,我们简单做⼀下解释,因为某些参数⼏乎⽤不到,所以我们只需记住常⽤的重要参数即可:
object,表⽰数组,即要⽣成 ndarray 数组的对象;
dtype,表⽰数据类型,根据给出的object⾃动确定;
copy,布尔值,为 True 表⽰复制对象;
order,指定内存布局,有 K、A、C、F 可选,默认即可;
subok,布尔值,创建的数组是否作为基类数组;
ndmin,指定数组具有的最⼩维数。
⽰例如下所⽰:
In [1]: import numpy as np
In [2]: data=np.array([[1,2],[3,4]])
In [3]: data
Out[3]:
array([[1, 2],
[3, 4]])
数学数组的定义是什么In [4]: data=np.array([1,2,3,4],dtype=complex)#复数类型
In [5]: data
Out[5]: array([1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j])
In [6]: data=np.array([1,2,3,4],ndmin=2)#⼆维数组
In [7]: data
Out[7]: array([[1, 2, 3, 4]])
2) np.arange(start,stop,step,dtype=None)
这个创建数组的⽅式也很容易理解,因为它和 Python 的内置函数的 range 函数是⼀样的,在以后我们会经常使⽤的到这个⽅法:
In [8]: data=np.arange(1,5,1)
通过调⽤ ndarray 数组的属性 reshape 可以改变数组的维度。
3) np.zeros(shape,dtype,order="C")与np.zeros_like()
这两种⽅法都可以创建全 0 数组,只不过后者可以参考某个 ndarry 数组的维度来创建全 0 数组,提供的参数含义如下所⽰:
shape:数组形状
dtype:数据类型
order: 表⽰数组在内存的存放次序是以⾏“C”为主,还是以列“F”为主,“A” 表⽰以列为主储存,⼀般默认即可。
⽰例如下:
In [1]: import numpy as np
In [2]: s(8)#⼀维数组含有8个元素
In [3]: data
Out[3]: array([0., 0., 0., 0., 0., 0., 0., 0.])
In [4]: s((3,3))#3*3的⼆维矩阵
In [5]: data
Out[5]:
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
In [6]: s_like(data)#按照data的维度⽣成数组
In [7]: data1
Out[7]:
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
你可能会有疑问,这种创建数组的⽅式有什么作⽤呢?其实它的作⽤还是挺重要的,它的应⽤场景就是掩码操作,即 0 代表 False ⽽ 1 代表 True,这在后⾯会给⼤家进⾏介绍。
4) np.ones(shape,dtype,order)与np.ones_like()
这两个⽅法和上⾯的 zeros ⽅法很相似,只不过它⽣成的是全 1 数组,⼜称为单位矩阵,如下所⽰:
In [8]: s(6)
In [9]: data
Out[9]: array([1., 1., 1., 1., 1., 1.])
In [10]: s((2,4))
In [11]: data
In [12]: s_like(data)
In [13]: data1
Out[13]:
array([[1., 1., 1., 1.],
[1., 1., 1., 1.]])
5) np.empty(shape,dtype,order)与np.empty_like()
⽤于创建空数组,只不过它不是真“空”,它会提供未初始化的随机值,如果想创建⾼维数组则需要 shape 传递⼀个元组,⽰例如下所⽰:
In [1]: import numpy as np
In [2]: pty(5)
In [3]: data
Out[3]:
array([0.00000000e+000, 0.00000000e+000, 0.00000000e+000, 6.36356552e-321,
2.64522281e+185])
In [4]: pty(shape=(3,3))
In [5]: data
Out[5]:
array([[6.23042070e-307, 1.42417221e-306, 1.37961641e-306],
[2.22522597e-306, 1.33511969e-306, 1.24610383e-306],
[1.51317517e-306, 9.34610469e-307, 2.56765117e-312]])
其中 e 是数学中⼀个超越数,是⼀个⽆限不循环⼩数。
6) np.eys()
<(N,M=None,k=0,dtype=None,order='C)
N: int 型,表⽰的是输出的⾏数。
M:int 型,可选项,输出的列数,如果没有就默认为 N。
k:int 型,可选项,对⾓线的下标,默认为0表⽰的是主对⾓线,负数表⽰的是低对⾓,正数表⽰的是⾼对⾓。
dtype:数据的类型,可选项,返回的数据的数据类型。
order:{'C','F'},可选项,也就是输出的数组的形式是按照C语⾔的⾏优先 'C',还是按照 Fortran 形式的列优先 'F' 存储在内存中。
In [13]: (5)#5*5矩阵
In [14]: data
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
In [15]: (4)#4*4矩阵
In [16]: data
Out[16]:
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
7) np.linspace()
⽣成指定范围内指定个数的⼀维数组,⽣成是⼀个等差数列,该⽅法的定义如下所⽰:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
对该⽅法的参数解释如下所⽰:
在指定的间隔 ["start","stop"] 内均匀地返回数字。返回“num”个等间距的样本。
endpoint 是⼀个 bool 类型的值,如果为 "Ture",“stop"是最后⼀个值,如果为"False",⽣成的数组不会包含 "stop" 值
retstep 也是⼀个 bool 类型的值,如果为"Ture",会返回样本之间的间隙。
在正态分布的数据关系中,该⽅法的使⽤频率很⾼,⽰例如下所⽰:
In [15]: data=np.linspace(2,6,num=10)
In [16]: data
Out[16]:
array([2. , 2.44444444, 2.88888889, 3.33333333, 3.77777778,
4.22222222, 4.66666667,
5.11111111, 5.55555556,
6. ])
In [17]: data=np.linspace(2,3,num=10)
In [18]: data
Out[18]:
array([2. , 2.11111111, 2.22222222, 2.33333333, 2.44444444,
2.55555556, 2.66666667, 2.77777778, 2.88888889,
3. ])
2. ndarray数组对象的属性
下⾯我们介绍 ndarray 数组的常⽤属性,其实在我们在前⾯知识介绍中已经涉及了⼀些,现在我们系统进⾏讲解,这⾥我们要理解⼏个专业名词,即维度、轴、秩,Numpy 中维度(dimensions)也称为轴(axis),⽽轴的个数称为秩。这些名词简单知道即可,不必深究。NumPy 的数组中有很多的属性,有⼀些属性可能在实例的⼯作中,可能万年不遇,所以我们只做针对性的介绍:
ndarray.size,获取元素的个数;
ndarray.dtype,元素的数据类型;
ndarray.itemsize,每个元素的字节⼤⼩;
ndarray.T,获取数组对象转置数组;
ndarray.nbytes,总字节数;
ndarray.imag ,获取复数的虚部;
ndarray.data,包含实际数组元素的缓冲区;
ndarray.flags,返回数组对象内部信息;
ndarray.base,若⼀个数组存在基类数组,⽤base可获取基类数组。
对于上⾯属性,我们只演⽰重要的⼀部分属性,⼤家可以⾃⼰尝试其他的属性,对于涉及到复数概念不清楚的,可以⾃⾏百度搜索,后⾯知识还会涉及到标量与向量的概念,所以⼤家要学会⾃学,这些简单的数学概念不会在教程中讲解。对象属性的操作⽰例如下:
In [1]: import numpy as np
In [2]: data=np.array([[1,2,3],[4,5,6]])
#获取维度
In [3]: data.shape
Out[3]: (2, 3)
#获取维数
In [4]: data.ndim
Out[4]: 2
#获取元素数据类型
In [5]: data.dtype
Out[5]: dtype('int32')
In [6]: data.size
Out[6]: 6
#每个元组字节⼤⼩
In [7]: data.itemsize
Out[7]: 4
#获取对象内存信息
In [8]: data.flags
Out[8]:
C_CONTIGUOUS : True # 数组位于单⼀的、C 风格的连续区段内
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论