说明
NumPy 教程 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
通常,可以通过使用 array() 函数将 Python 中以数组状结构排列的数值数据转换为数组。 最明显的例子是列表和元组。
有以下常用的方法,可以将现有的各类数据创建一个数组(按 np.xxx 格式使用)。
方法 | 说明 |
---|---|
np.array(object[, dtype, copy, order, subok, ndmin]) | 创建数组的基本方法 |
np.asarray(a[, dtype, order]) | 将输入转换为数组 |
np.asanyarray(a[, dtype, order]) | 将输入转换为ndarray,但传递ndarray子类 |
np.ascontiguousarray(a[, dtype]) | 返回内存中的连续数组(ndim>=1),C 顺序 |
np.asmatrix(data[, dtype]) | 将输入解释为矩阵 |
np.copy(a[, order, subok]) | 返回给定对象的数组副本 |
np.frombuffer(buffer[, dtype, count, offset]) | 将缓冲区解释为一维数组 |
np.fromfile(file[, dtype, count, sep, offset]) | 从文本或二进制文件中的数据构造数组 |
np.fromfunction(function, shape, *[, dtype]) | 通过在每个坐标上执行函数来构造数组 |
np.fromiter(iterable, dtype[, count]) | 从可迭代对象对象创建一个新的一维数组 |
np.fromstring(string[, dtype, count, sep]) | 从字符串中的文本数据初始化的新一维数组 |
np.loadtxt(fname[, dtype, comments, delimiter, …]) | 从文本文件加载数据 |
np.array 是最为基本的创建数组的方法,返回一个满足指定要求的数组对象 ndarray。
它的语法格式如下:
# 创建一个数组
numpy.array(object, dtype=None, *,
copy=True, order='K',
subok=False, ndmin=0)
object: array_like
数组、任何暴露数组接口的对象,对象的 __array__
方法返回数组或者任何(嵌套的)序列
dtype: data-type, optional
数组所需要的数据类型。 如果未给出,则将类型认定为在序列中保存对象所需的最小类型(minimum type)
copy: bool, optional
如果为 true(默认值),则复制对象。 否则,将仅用 __array__
返回副本,如果obj 是嵌套序列或满足其他任何要求(dtype,order 等)需要副本时,才创建副本
order: {‘K’, ‘A’, ‘C’, ‘F’}, optional
指定数组的内存布局。 如果 object 不是数组,则除非指定为 'F',否则新创建的数组将以 C 顺序(行为主),在这种情况下,它将以 Fortran 顺序(列为主)。 如果object 是一个数组,则保持以下规则:
order | copy=False | copy=True |
---|---|---|
‘K’ | unchanged | 保留 F&C 顺序,否则最相似的顺序 |
‘A’ | unchanged | 如果输入是 F 而不是 C,则为 F 顺序,否则为 C 顺序 |
‘C’ | C order | C 顺序 |
‘F’ | F order | F 顺序 |
注:当顺序为“ A”且对象不是 “ C”或 “ F” 顺序的数组,并且由于 dtype 的变化而强制执行复制时,结果的顺序不一定就是预期的 “ C”。 这可能是一个 bug。
subok: bool, optional
如果为 True,则将传递子类,否则,返回的数组将被强制为基类数组(默认)
ndmin: int, optional
指定结果数组应具有的最小维数,可以根据需要预先添加形状
np.array([1, 2, 3])
# array([1, 2, 3])
向上造型:
np.array([1, 2, 3.0])
# array([ 1., 2., 3.])
多个维度:
np.array([[1, 2], [3, 4]])
'''
array([[1, 2],
[3, 4]])
'''
最小维数为 2:
np.array([1, 2, 3], ndmin=2)
# array([[1, 2, 3]])
指定类型:
np.array([1, 2, 3], dtype=complex)
# array([ 1.+0.j, 2.+0.j, 3.+0.j])
数据类型包含多个元素:
x = np.array([(1,2),(3,4)],dtype=[('a','<i4'),('b','<i4')])
x['a']
# array([1, 3])
从子类创建数组:
np.array(np.mat('1 2; 3 4'))
'''
array([[1, 2],
[3, 4]])
'''
np.array(np.mat('1 2; 3 4'), subok=True)
'''
matrix([[1, 2],
[3, 4]])
'''
numpy.asarray(a, dtype=None, order=None)
将输入的类似列表的序列转换为数组。返回一个 ndarray。如果输入已经是具有匹配 dtype 和 order 的 ndarray,则不执行复制。 如果 a 是 ndarray 的子类,则返回基类 ndarray。
其中参数为:
a: array_like
输入数据,可以转换为数组的任何形式。 这包括列表,元组嵌套列表,元组,元组嵌套元组,列表嵌套元组 和 ndarray
dtype: data-type, optional
默认情况下,从输入数据中推断出数据类型
order: {‘C’, ‘F’}, optional
是使用行优先(C 风格)还是列优先(Fortran 风格)内存表示形式, 默认按“ C”
将列表转换为数组:
a = [1, 2]
np.asarray(a)
# array([1, 2])
现有数组未复制:
a = np.array([1, 2])
np.asarray(a) is a
# True
如果设置了 dtype,则仅当 dtype 不匹配时才复制数组:
a = np.array([1, 2], dtype=np.float32)
np.asarray(a, dtype=np.float32) is a
# True
np.asarray(a, dtype=np.float64) is a
# False
与 asanyarray 相反,ndarray 子类未通过传递:
issubclass(np.recarray, np.ndarray)
# True
a = np.array([(1.0, 2), (3.0, 4)], dtype='f4,i4').view(np.recarray)
np.asarray(a) is a
# False
np.asanyarray(a) is a
# True
numpy.asanyarray(a, dtype=None, order=None)
将输入转换为 ndarray,如果 a 是 ndarray 或 ndarray 的子类,则按原样返回它,并且不执行复制。
将列表转换为数组:
a = [1, 2]
np.asanyarray(a)
# array([1, 2])
ndarray 子类的实例按原样传递:
a = np.array([(1.0, 2), (3.0, 4)], dtype='f4,i4').view(np.recarray)
np.asanyarray(a) is a
# True
返回给定对象的数组副本,相当于 np.array(a, copy=True)
。
x = np.array([1, 2, 3])
y = x # 赋值
z = np.copy(x) # 深拷贝
x[0] = 0 # 修改数据
x
# array([0, 2, 3])
y # 随 x 修改而修改
# array([0, 2, 3])
z # 深拷贝未随 x 修改而修改
# array([1, 2, 3])
其他方法有:
x = np.array([[1, 2], [3, 4]])
# 将输入解释为矩阵
m = np.asmatrix(x)
x[0,0] = 5 # 如果输入已经是矩阵或数组则不复制
m
'''
matrix([[5, 2],
[3, 4]])
'''
更新时间:Jan. 5, 2021, midnight 标签:numpy array