ndarray 的创建方式
# 创建方式
np.array()
将输入的列表、元组、数组等序列类型转换我 ndaray 对象
np.asarray()
array()和 asarray()都可以将结构数据转化为 ndarray,但是主要区别就是当数据源是 ndarray 时,array 仍然会 copy 出一个副本,占用新的内存,但 asarray 不会
np.zeros()
根据指定形状创建一个全为 0 的 ndarray 对象
np.zeros_like()
传入一个数组作为参数,根据该数组的形状和 dtype 创建一个全 0 的 ndaray 对象
np.ones()
根据指定形状创建一个全为 1 的 ndarray 对象
np.ones_like()
传入一个数组作为参数,根据该数组的形状和 dtype 创建一个全 1 的 ndaray 对象
np.empty()
根据指定形状创建 ndarray 对象,只分配内存但是不填充任何值
np.empty_like()
同上
np.full()
根据指定形状传建一个 ndarray 对象,并用 fill_value 的值进行填充
np.full_like()
传入一个数组作为参数,根据该数组的形状创建一个 ndarray 对象,并用 fill_value 的值进行填充
np.eye()
传入一个整数 N,创建一个 N * N 的单位矩阵
np.identity()
传入一个整数 N,创建一个 N * N 的单位矩阵
np.random
随机抽样创建
np.arange()
在给定间隔内返回均匀间隔的值(一维数组)
np.linspace()
返回指定间隔内的等距数字。
np.fromfunction()
通过对每个坐标执行函数来构造数组
np.fromfile()
从文本或二进制文件中的数据构造数组
# 示例
import numpy as np
# data1也可以是tuple类型
# data1可以进行嵌套
data = [[1,2,3], [4,5,6]]
arr1 = np.array(data)
arr1
2
3
4
5
6
7
array([[1, 2, 3],
[4, 5, 6]])
arr2 = np.asarray(arr1)
arr2
2
array([[1, 2, 3],
[4, 5, 6]])
arr3 = np.zeros([3, 4])
arr3
2
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
arr4 = np.zeros_like(data)
arr4
2
array([[0, 0, 0],
[0, 0, 0]])
arr5 = np.ones([2, 3])
arr5
2
array([[1., 1., 1.],
[1., 1., 1.]])
arr6 = np.ones_like(data)
arr6
2
array([[1, 1, 1],
[1, 1, 1]])
# 可以直接在终端中演示
arr7 = np.empty([2, 2])
arr7
2
3
array([[3.62630691e-162, 2.21673659e-301],
[1.76145475e-312, 6.93738460e-310]])
arr8 = np.empty_like(data)
arr8
2
array([[4607182418800017408, 4607182418800017408, 4607182418800017408],
[4607182418800017408, 4607182418800017408, 4607182418800017408]])
arr9 = np.full([2,3], fill_value=3)
arr9
2
array([[3, 3, 3],
[3, 3, 3]])
arr10 = np.full_like(data, 8)
arr10
2
array([[8, 8, 8],
[8, 8, 8]])
# numpy.identity(n, dtype=None)
arr11 = np.identity(5)
arr11
2
3
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
"""
numpy.eye(N, M=None, k=0, dtype=<class‘float’>, order=’C’)
N: 行数
M:列数,默认等于N
k:对角线索引:0(默认)为主对角线,正值是指上对角线,负值是指到下对角线
order: {'C', 'F'}输出是否应存储在主要行(C样式)中或内存中的列主(Fortran样式)顺序
"""
arr12 = np.eye(5)
arr12
2
3
4
5
6
7
8
9
array([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
arr13 = np.random.randn(2, 3)
arr13
2
array([[-0.0678351 , 0.23346548, 0.86009531],
[ 0.33758557, -0.0413585 , -0.12480603]])
"""
参数
start:开始位置,数字,可选,默认值为0
stop:结束位置,数字,
step:步长,数字,可选,默认为1。如果指定step则必须指定start
dtype:类型。不指定则自动推断
"""
arr14 = np.arange(start=0, stop=10, step=2)
arr14
2
3
4
5
6
7
8
9
array([0, 2, 4, 6, 8])
arr15 = np.linspace(0, 10, 5)
arr15
2
array([ 0. , 2.5, 5. , 7.5, 10. ])
def fun(x, y):
return x * 10 + y
np.fromfunction(fun, (4, 5), dtype=np.int)
2
3
4
array([[ 0, 1, 2, 3, 4],
[10, 11, 12, 13, 14],
[20, 21, 22, 23, 24],
[30, 31, 32, 33, 34]])
def my_dot(a, b):
return a * b
np.fromfunction(my_dot, (2, 3))
2
3
4
array([[0., 0., 0.],
[0., 1., 2.]])
np.fromfunction(lambda i,j:i+j,(2, 3))
array([[0., 1., 2.],
[1., 2., 3.]])
np.fromfile(file, dtype=float, count=-1, sep='')
- file:要打开的文件对象或者文件名
- dtype:返回数组的数据类型。对于二进制文件,它用于确定文件中项目的大小和字节顺序。错误的数据类型会返回错误的数据
- count:要读取的项目数。-1 表示所有项目(即完整文件)
- sep:如果文件是文本文件,则表示分隔项之间的分隔符。空(“”)分隔符表示应将文件视为二进制文件。分隔符中的空格(“”)与零个或多个空白字符匹配。仅由空格组成的分隔符必须至少与一个空格匹配
np.fromfile('./file/fromfile')
array([0., 1., 2., 1., 2., 3.])
np.arange(12).tofile('./file/intfile')
np.fromfile('./file/intfile') # 默认的dtype是float
array([0.0e+000, 4.9e-324, 9.9e-324, 1.5e-323, 2.0e-323, 2.5e-323,
3.0e-323, 3.5e-323, 4.0e-323, 4.4e-323, 4.9e-323, 5.4e-323])
更多创建方式https://www.numpy.org/devdocs/reference/routines.array-creation.html (opens new window)。