ndarray是numpy中基础类型,根据官方文档Quickstarttutorialhttps://numpy.org/devdocs/user/quickstart.html支持它是相同数据类型的多维数组,相当于多个元组的组合,其中Numpy中的多维被称为轴
比如,在一个3d空间中表示一个点为【1,2,1】代表了一个轴,每个轴有3个元素,所以长度为3,比如一个2*3的矩阵代表有li个轴,每个轴为3维空间,
[[ 1., 0., 0.],
[ 0., 1., 2.]]
ndarray可以表示为N维的数组,在ndarray中每个轴占用相同的内存,其内存存储格式如下:
其内部数据结构主要由以下几个部分组成:
(1)header代表为ndarray的头部信息,包括一个data-type,
(2) data-type为数组中每个元素固定的大小 占用的空间
(3)一个指向数组离散array scalar的指针,该元素可以指向ndarray中的某个具体的元素,以此来来实现可以通过index访问里面的某个元素值
创建ndarray
创建ndarray可以官方给出了有好几种方法,下面将以此介绍
1:array
可以使用numpy.array函数来创建一个ndarray,其函数格式如下:
numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
官方文档中该函数链接为https://docs.scipy.org/doc/numpy/reference/generated/numpy.array.html#numpy.array
参数介绍
object:必选项,为数组或者嵌套的序列
dtype: 可选项,数组的元素数据类型,如果没有设置 默认则为最小类型,32位情况下为整型为4个字节,64位情况下为8个字节
copy:可选项,对象是否需要复制,默认True,表示copy object重新申请内存申请一个数据和object大小值一样的nbarray
order:可选项,创建数组的样式,C为行方向,F为列方向,A为任意方向,K为按照行和列方向,默认为K
subok:可选项,如果为True,子类将会被传递,默认为False,返回的将会强制为基类
ndmin, 输出最小的维度
输出为ndarray格式数组
使用范例:
1.创建一个1*3维的数组:
import numpy as np
a= np.array([2,3,4])
print(a)
运行结果 :
[2 3 4]
2:创建一个3*3维的数组:
import numpy as np
a= np.array([[2,3,4],
[4,5,6],
[7,8,9]])
print(a)
运行结果:
[[2 3 4]
[4 5 6]
[7 8 9]]
3:创建一个3*3维的数组,指定dtype为complex:
import numpy as np
a= np.array([[2,3,4],
[4,5,6],
[7,8,9]],dtype=complex)
print(a)
运行结果:
[[2.+0.j 3.+0.j 4.+0.j]
[4.+0.j 5.+0.j 6.+0.j]
[7.+0.j 8.+0.j 9.+0.j]]
4:创建一个3*3维数组,ndmin =2:
import numpy as np
a= np.array([[2,3,4],
[4,5,6],
[7,8,9]],ndmin=2)
print(a)
运行结果:
[[2 3 4]
[4 5 6]
[7 8 9]]
2:zeros
numpy.zeros函数创建的数组元素值全部为零,其函数原型为:
numpy.zeros(shape, dtype=float, order='C')
参数:
shape:必选项 各维度的大小的元组,比如一个n*m的数组表示方法为(n,m)
其他两个参数和上述一致
使用范例::
1创建一个2*3大小的数组,且初始化为0:
import numpy as np
a= np.zeros((2, 3))
print(a)
运行结果:
[[0. 0. 0.]
[0. 0. 0.]]
2:创建一个5的数组,且类型为整数
import numpy as np
a= np.zeros((5), dtype=int)
print(a)
print("********")
a= np.zeros((5,), dtype=int)
print(a)
运行结果:
[0 0 0 0 0]
********
[0 0 0 0 0]
3:ones
使用numpy.ones()函数,与zeros函数不同的是,将数组元素值都初始化为1,其函数原型为:
numpy.ones(shape, dtype=None, order='C')[source]
参数和上述参数意义一致,不再解释
使用用例:
import numpy as np
a= np.ones((5))
print(a)
print("********")
b= np.ones((5,), dtype=int)
print(b)
print("********")
b= np.ones((2,1))
print(b)
print("********")
b= np.ones((3,3))
print(b)
运行结果:
[1. 1. 1. 1. 1.]
********
[1 1 1 1 1]
********
[[1.]
[1.]]
********
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
4:empy
使用numpy.empty()函数,没有初始化入口,创建的数组元素值为随机值,其函数原型为:
numpy.empty(shape, dtype=float, order='C')
使用用例:
import numpy as np
a= np.empty((3,3))
print(a)
print("********")
b= np.empty((3,3), dtype=int)
print(b)
运行结果:
[[1.01804521e+235 1.33360424e+241 1.48000718e-309]
[7.96738274e-220 5.84493794e-312 7.99079649e-306]
[1.33360426e+241 1.51803335e-309 4.13690164e-186]]
********
[[ 44 0 0]
[ 0 0 0]
[204 0 0]]
5:full
numpy.full函数顾名思义就是将创建的数组里面的值全部初始化为入口值,其函数为:
numpy.full(shape, fill_value, dtype=None, order='C')[source]
将创建的数组全部初始化为fill_value的值
用例:
import numpy as np
a= np.full((3,3),np.inf)
print(a)
print("********")
b= np.full((3,3), 10)
print(b)
运行结果:
[[inf inf inf]
[inf inf inf]
[inf inf inf]]
********
[[10 10 10]
[10 10 10]
[10 10 10]]
除了上述几个函数 还有empty_like, ones_like,zeros_like等函数
6:arange
numpy.arange()创建的数组序列,按照一定的间隔递增,其函数为:
numpy.arange([start, ]stop, [step, ]dtype=None)
参数意义:
start:为起始值,默认为0
stop:为结束值
step为步长
使用用例
1:创建数组从0到5:
import numpy as np
a= np.arange(6)
print(a)
运行结果:
[0 1 2 3 4 5]
2:创建从10到30,步长为5的数组
import numpy as np
a= np.arange(10,31,5)
print(a)
运行结果:
[10 15 20 25 30]
7:linspace
numpy.linspace()与arange最大不不同是创建数组的步长可以根据num数量自动计算,其函数原型为:
umpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
num为在start和stop之间需要创建多少个元素,默认为50
使用范围如下:
import numpy as np
a= np.linspace(2.0, 3.0, num=5)
print(a)
print("********")
a= np.linspace(2.0, 3.0, num=5, endpoint=False)
print(a)
print("********")
a= np.linspace(2.0, 3.0, num=5, retstep=True)
print(a)
运行结果:
[2. 2.25 2.5 2.75 3. ]
********
[2. 2.2 2.4 2.6 2.8]
********
(array([2. , 2.25, 2.5 , 2.75, 3. ]), 0.25)
The Basics
ndarray除了提供以上函数之外,还提供了一些基本操作,如下列表
Method | Descript |
ndarray.ndim | 该矩阵的维度 |
ndarray.shape | 为每个维度大小的元组 |
ndarray.size | 该矩阵元素个数 |
ndarray.itemsize | 矩阵每个元素占用空间大小 |
ndarray.dtype | 矩阵元素数据类型 |
ndarray.data | 矩阵数据部分 |
示范用例:
import numpy as np
a= np.array([[[2,3,4],
[4,5,6],
[7,8,9]],
[[2,3,4],
[4,5,6],
[7,8,9]]])
print(a.ndim)
print(a.shape)
print(a.size)
print(a.dtype)
print(a.itemsize)
print(a.data)
运行结果:
3
(2, 3, 3)
18
int32
4
<memory at 0x05F748B0>