Numpy:数组对象(Ndarray)的定义和创建


数组定义

数组对象(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()

扫描二维码关注公众号,回复: 13838286 查看本文章
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(shape) 返回与给定数组具有相同形状和类型的数组。
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(),只是生成的数组中元素的值不一样,参数也类似。可以举一反三使用。

猜你喜欢

转载自blog.csdn.net/shield911/article/details/124073875