数组定义
数组对象(Ndarray)是一个组合词,其中:N为数字,d(dimension)维度,array(数组),也可以称为N维数组。
创建数组
创建数组的方法有很多种,通过功能归类可以分为以下三种:
1. 通过现有数据创建
方法 | 说明 |
---|---|
numpy.array(object) | 创建一个数组 |
numpy.asarray(a) | 将输入转换为数组。 |
numpy.asanyarray(a) | 将输入转换为 ndarray,但传递 ndarray 子类。 |
numpy.ascontiguousarray(a) | 在内存中返回一个连续数组 (ndim >= 1) |
numpy.asmatrix(data) | 将输入解释为矩阵。 |
numpy.copy(a) | 返回给定对象的数组副本。 |
numpy.frombuffer(buffer) | 将缓冲区解释为一维数组。 |
numpy.fromfile(file) | 从文本或二进制文件中的数据构造一个数组 |
numpy.fromfunction(func) | 通过在每个坐标上执行一个函数来构造一个数组。 |
numpy.fromiter(iter) | 从可迭代对象创建一个新的一维数组。 |
numpy.fromstring(string) | 从字符串中的文本数据初始化的新一维数组。 |
numpy.loadtxt(fname) | 从文本文件加载数据。 |
仅用常用的函数进行讲解语法和示例:
array()
numpy.array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0, like=None)
通过复制引用对象的数据创建数组。
参数说明:
- object:接受array_like,任何接受数组接口的对象,或任何(嵌套)序列无默认值。
- dtype:表示数组所需的数据类型。如果没有给出,那么类型将被确定为在序列中保存对象所需的最小类型。
- copy:默认为True,复制对象。
- order:指定数组的内存布局。可选:{‘K’, ‘A’, ‘C’, ‘F’},默认:‘C’。
- subok:如果为 True,则子类将被传递,否则返回的数组将被强制为基类数组(默认)。
- ndmin:指定结果数组应具有的最小维数
- like:引用对象以允许创建不是 NumPy 数组的数组。
返回值:
- ndarray
示例:
>>> import numpy as np
>>> arr01 = np.array([1,2,3,4], dtype=np.int8)
array([1, 2, 3, 4], dtype=int8)
asarray()
numpy.asarray(a, dtype=None, order=None, *, like=None)
将输入转换为数组。
参数说明:
- a:可以转换为数组的任何形式的输入数据。这包括列表、元组列表、元组、元组的元组、列表的元组和 ndarray。
- dtype:数据类型,可选。默认情况下,数据类型是从输入数据中推断出来的。
- order:指定数组的内存布局。可选:{‘K’, ‘A’, ‘C’, ‘F’},默认:‘C’。
- like:引用对象以允许创建不是 NumPy 数组的数组。
返回值:
- ndarray
示例:
>>> import numpy as np
>>> arr01 = np.array([1,2,3,4], dtype=np.float32)
>>> arr02 = np.asarray(arr01) # 直接引用arr01的数据,不复制
array([1, 2, 3, 4], dtype=int8)
# 当数据类型dtype相同时直接引用数据
>>> np.asarray(arr01, dtype=np.float32) is arr01
True
# 当数据类型dtype不相同时复制数据
>>> arr01 = np.array([1,2,3,4], dtype=np.float32)
>>> np.asarray(arr01, dtype=np.float64) is arr01
False
注意:array()和asarray()的区别在于:array()直接复制数据,asarray()如果dtype相同时做引用,不复制数据;dtype不用时才会复制数据。
2. 通过数值范围创建
方法 | 说明 |
---|---|
numpy.arange() | 在给定的间隔内返回均匀间隔的值构成的数组。 |
numpy.linspace() | 在指定的间隔内返回均匀分布的数字。 |
numpy.logspace() | 返回在对数刻度上均匀分布的数字。 |
numpy.geomspace() | 返回在对数尺度上均匀分布的数字(几何级数)。 |
numpy.meshgrid() | 从坐标向量返回坐标矩阵。 |
numpy.mgrid() | 它返回一个密集的多维“网格”。 |
numpy.ogrid() | 它返回一个开放的多维“网格”。 |
arange()
numpy.arange([start, ]stop, [step, ]dtype=None, *, like=None)
在给定的范围内返回均匀间隔的值的数组。
参数说明:
- start:开始值,接收整数或实数,默认开始值为0。
- stop:结束值(不包括结束值),接收整数或实数,无默认值。
- step:步长,值之间的间隔,接收整数或实数,默认为1。
- dtype:数据类型,无默认,如果dtype未给出,则从其他输入参数推断数据类型。
- like:引用对象以允许创建不是 NumPy 数组的数组。
返回值:
- ndarray
示例:
>>> np.arange(3,7)
array([3, 4, 5, 6])
linspace()
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
返回等差数列数组。
参数说明:
- start:接收array_like,序列的开始值。
- stop:接收array_like,序列的结束值。
- num:接收int(必须为非负数),生成的样本数量,默认值为50。
- endpoint:接受布尔值,如果为True,则包含结束值,否则不包括结束值。默认为真。
- retstep:接收布尔值,如果为 True,则返回 ( samples , step),其中step是样本之间的间距。默认为False。
- dtype:输出数组的类型。
- axis:接收int。结果中用于存储样本的轴。
返回值:
- samples:ndarray
- step:当retstep为Trur时返回。样本之间的间距大小。
示例:
>>> np.linspace(2.0, 3.0, num=5)
array([2. , 2.25, 2.5 , 2.75, 3. ])
>>> np.linspace(2.0, 3.0, num=5, endpoint=False)
array([2. , 2.2, 2.4, 2.6, 2.8])
>>> np.linspace(2.0, 3.0, num=5, retstep=True)
(array([2. , 2.25, 2.5 , 2.75, 3. ]), 0.25)
logspace()
numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0)
返回等比数列数组。
参数说明:
- start:接收array_like,序列的开始值。
- stop:接收array_like,序列的结束值。
- num:接收int(必须为非负数),生成的样本数量,默认值为50。
- endpoint:接受布尔值,如果为True,则包含结束值,否则不包括结束值。默认为真。
- base:对数的底数,默认值为 10.0。
- dtype:输出数组的类型。
- axis:接收int。结果中用于存储样本的轴。
返回值:
- samples:ndarray
示例:
>>> np.logspace(2.0, 3.0, num=4)
array([ 100., 215.443469, 464.15888336, 1000. ])
>>> np.logspace(2.0, 3.0, num=4, endpoint=False)
array([100., 177.827941, 316.22776602, 562.34132519])
>>> np.logspace(2.0, 3.0, num=4, base=2.0)
array([4., 5.0396842, 6.34960421, 8.])
3. 通过形状或值创建
方法 | 说明 |
---|---|
numpy.empty(shape) | 返回给定形状和类型的新数组 |
numpy.empty_like(prototype) | 返回一个与给定数组具有相同形状和类型的新数组。 |
numpy.eye(N) | 返回一个二维数组,其中对角线为 1,其他位置为 0。 |
numpy.identity(n) | 返回标识数组。 |
numpy.ones(shape) | 返回一个给定形状和类型的新数组,用一个填充。 |
numpy.ones_like(a) | 返回与给定数组具有相同形状和类型的数组。 |
numpy.zeros(shape) | 返回与给定数组具有相同形状和类型的零数组。 |
numpy.zeros_like(a) | 返回与给定数组具有相同形状和类型的数组。 |
numpy.full(shape, fill_value) | 返回一个给定形状和类型的新数组,用fill_value填充。 |
numpy.full_like(a, fill_value) | 返回与给定数组具有相同形状和类型的完整数组。 |
ones()
numpy.ones(shape, dtype=None, order='C', *, like=None)
返回一个值全部为1的给定形状和数据类型的数组。
参数说明:
- shape:接收int或者包含int的序列,数组的形状,一般使用元组(行数,列数)。
- dtype:接收data-type或者numpy的数据类型,默认为numpy.float64。元素数据类型。
- order:可选{‘C’, ‘F’},默认为:‘C’。在内存中以行优先(C 风格)或列优先(Fortran 风格)的顺序存储多维数据。
- like:引用对象以允许创建不是 NumPy 数组的数组。
返回值:
- out:ndarray
示例:
>>> np.ones(shape=(5,2), dtype=int)
array([[1, 1],
[1, 1],
[1, 1],
[1, 1],
[1, 1]])
ones_like()
numpy.ones_like(a, dtype=None, order='K', subok=True, shape=None)
返回一个值都是1,形状和参数a相同的数组。
参数说明:
- a:接收类似数组的对象,a的形状和数据类型传递给了新的数组。
- dtype:接收data-type或者numpy的数据类型,默认为numpy.float64。元素数据类型。
- order:可选{‘C’, ‘F’},默认为:‘C’。在内存中以行优先(C 风格)或列优先(Fortran 风格)的顺序存储多维数据。
- subok:接收布尔值,如果为 True,则新创建的数组将使用a的子类类型,否则它将是基类数组。默认为真。
- shape:接收整数或整数序列,
返回值:
- out:ndarray
示例:
>>> arr01 = np.arange(10,34).reshape(4,6)
>>> arr02 = np.ones_like(arr01)
array([[1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1]])
其他函数原理同ones()和ones_like(),只是生成的数组中元素的值不一样,参数也类似。可以举一反三使用。