Numpy用法入门之创建数组(arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity, linsp)

(作者:陈玓玏)

在求解系数矩阵、画图等过程中,我们总是需要创建很多初始的矩阵,那么今天就干脆来总结一下,numpy中常用的矩阵创建方法及它们的应用场景。

import numpy as np
#arange创建等差数列,可以是整数也可以是小数,np.array(起始值,结束值,步长),注意是左闭右开区间
data = np.arange(0,1,0.1)
#结果:
[ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]


#array生成多维数组
data = np.array([[0,1],[1,2],[2,3]])
#输出二维数组的切片值,这里分别取第1行第2列和整个数组的第2print(data[0,1],data[:,1])
print(data)
#结果:
1 [1 2 3]
[[0 1]
 [1 2]
 [2 3]]


#copy深复制对象,即不仅复制对象的引用,也为该对象新开辟了一样的内存,改变新对象不改变原对象
data1 = data.copy()
#empty初始化对象为空值,虽然说是空值,但一般输出都会有无限接近0的值出现,因为计算机中的数值0总是会取一些无限接近0的数
data = np.empty((2,4))
#结果:
[[  6.23042070e-307   4.67296746e-307   1.69121096e-306   1.24610927e-306]
 [  7.56599807e-307   8.90104239e-307   2.22523004e-307   2.44031977e-312]]


#empty_like返回一个和输入矩阵shape相同的array
data = np.empty_like(np.array([[0,1],[1,2],[2,3]]))
#结果:
[[0 0]
 [0 0]
 [0 0]]


#eye生成对角为1而其余为0的矩阵
data = np.eye(2,3)
#结果:
[[ 1.  0.  0.]
 [ 0.  1.  0.]]


#fromfile根据文件中的内容生成矩阵对象
#data = np.fromfile('filepath')
#fromfunction将函数的方式创建数组
#输出x和y可以看到,x是一个第一行全为0,第二行全为1,依此类推的矩阵
#而y是一个第一列全为1,第二类全为2,依此类推的矩阵
#最终得到的data是一个这两个矩阵依公式求得的结果
def f(x,y):
    print('x',x,'y',y)
    return 10*x+y
data = np.fromfunction(f,(5,4),dtype=int)
#结果:
x
[[0 0 0 0]
 [1 1 1 1]
 [2 2 2 2]
 [3 3 3 3]
 [4 4 4 4]] 
y
[[0 1 2 3]
 [0 1 2 3]
 [0 1 2 3]
 [0 1 2 3]
 [0 1 2 3]]

[[ 0  1  2  3]
 [10 11 12 13]
 [20 21 22 23]
 [30 31 32 33]
 [40 41 42 43]]


#identity生成单位矩阵,类似eye,不同的是eye输入两个参数,可以生成非方阵,而identity只输入一个参数,只生成方阵
data = np.identity(10)
#结果:
[[ 1.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  1.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  1.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  1.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  1.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  1.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  1.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  1.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  1.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  1.]]


#linspace生成等差数列,与arrange不同的是,它是一个左闭右闭区间,且第三个参数不是步长,而是生成数组的长度
#在画图时使用得多,生成横纵坐标的刻度时很管用
data = np.linspace(1,10,10)
#结果:
[  1.   2.   3.   4.   5.   6.   7.   8.   9.  10.]


#logspace生成等比数列
#base设置底数,前三个参数分别表示指数的开头、指数的结尾、序列的长度
data = np.logspace(1,10,10,base=2)
#结果:
[    2.     4.     8.    16.    32.    64.   128.   256.   512.  1024.]


#mgrid可以用于生成横纵坐标的刻度,输出值其实是两个矩阵,一个表示y轴的划分,一个表示x轴的划分
#输入参数2:5表示的是纵轴的刻度范围,4:9表示的是横轴的刻度范围,两个小数表示的则是步长
data = np.mgrid[2:5:0.5,4:9:1]
#结果:
[[[ 2.   2.   2.   2.   2. ]
  [ 2.5  2.5  2.5  2.5  2.5]
  [ 3.   3.   3.   3.   3. ]
  [ 3.5  3.5  3.5  3.5  3.5]
  [ 4.   4.   4.   4.   4. ]
  [ 4.5  4.5  4.5  4.5  4.5]]

 [[ 4.   5.   6.   7.   8. ]
  [ 4.   5.   6.   7.   8. ]
  [ 4.   5.   6.   7.   8. ]
  [ 4.   5.   6.   7.   8. ]
  [ 4.   5.   6.   7.   8. ]
  [ 4.   5.   6.   7.   8. ]]]


#ogrid参数设置和结果与mgrid类似,但mgrid两个输出矩阵是同shape的,而ogrid的输出两个向量,列向量和行向量,
# mgrid的输出结果就是ogrid的结果分别复制扩充为同shape矩阵
data = np.ogrid[2:5:0.1,4:9:0.5]
#结果:
[array([[ 2. ],
       [ 2.5],
       [ 3. ],
       [ 3.5],
       [ 4. ],
       [ 4.5]]), array([[ 4.,  5.,  6.,  7.,  8.]])]


#ones生成全1的矩阵,输入参数为shape
data = np.ones((2,4))
#结果:
[[ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]]


#ones_like生成与输入矩阵同shape的全1矩阵
data = np.ones_like(np.array([[0,1],[1,2],[2,3]]))
#结果:
[[1 1]
 [1 1]
 [1 1]]


#zeros生成全0的矩阵,输入参数为shape
data = np.zeros((2,4))
#zeros_like生成与输入矩阵同shape的全0矩阵
data = np.zeros_like(np.array([[0,1],[1,2],[2,3]]))
#r合并两个矩阵
data = np.r_[[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]]
print(data)
#结果:
[[1 2 3]
 [4 5 6]
 [1 2 3]
 [4 5 6]]

猜你喜欢

转载自blog.csdn.net/weixin_39750084/article/details/81274725