Numpy入门[11]——生成数组的函数
创始人
2024-03-16 13:44:44
0

Numpy入门[11]——生成数组的函数

参考:

https://ailearning.apachecn.org/

使用Jupyter进行练习

import numpy as np

arange

arange 类似于Python中的 range 函数,只不过返回的不是列表,而是数组:

arange(start, stop = None, step = 1, dtype = None)

产生一个在区间 [start, stop) 之间,以 step为间隔的数组,如果只输入一个参数,则默认从 0 开始,并以这个值为结束:

np.arange(4)
array([0, 1, 2, 3])

range 不同, arange 允许非整数值输入,产生一个非整型的数组:

np.arange(0, 2 * np.pi, np.pi/4)
array([0.        , 0.78539816, 1.57079633, 2.35619449, 3.14159265,3.92699082, 4.71238898, 5.49778714])

数组的类型默认由参数 start, stop, step 来确定,也可以指定:

np.arange(0, 2 * np.pi, np.pi / 4, dtype=np.float32)
array([0.       , 0.7853982, 1.5707964, 2.3561945, 3.1415927, 3.926991 ,4.712389 , 5.4977875], dtype=float32)

由于存在精度问题,使用浮点数可能出现问题:

np.arange(1.5, 2.1, 0.3)
array([1.5, 1.8, 2.1])

stop 的值 2.1 出现在了数组中,所以使用浮点数的时候需要注意。

linspace

linspace(start, stop, N) 

产生 N 个等距分布在 [start, stop]间的元素组成的数组,包括 start, stop

np.linspace(0, 1, 5)
array([0.  , 0.25, 0.5 , 0.75, 1.  ])

logspace

logspace(start, stop, N) 

产生 N 个对数等距分布的数组,默认以10为底:

np.logspace(0, 1, 5)
array([ 1.        ,  1.77827941,  3.16227766,  5.62341325, 10.        ])

产生的值为[100,100.25,100.5,100.75,101]\left[ 10^0,10^{0.25},10^{0.5},10^{0.75},10^1\right][100,100.25,100.5,100.75,101]

meshgrid

有时候需要在二维平面中生成一个网格,这时候可以使用 meshgrid 来完成这样的工作:

x_ticks = np.linspace(-1, 1, 5)
y_ticks = np.linspace(-1, 1, 5)x, y = np.meshgrid(x_ticks, y_ticks)

生成的x,y如下:

y
array([[-1. , -1. , -1. , -1. , -1. ],[-0.5, -0.5, -0.5, -0.5, -0.5],[ 0. ,  0. ,  0. ,  0. ,  0. ],[ 0.5,  0.5,  0.5,  0.5,  0.5],[ 1. ,  1. ,  1. ,  1. ,  1. ]])
x
array([[-1. , -0.5,  0. ,  0.5,  1. ],[-1. , -0.5,  0. ,  0.5,  1. ],[-1. , -0.5,  0. ,  0.5,  1. ],[-1. , -0.5,  0. ,  0.5,  1. ],[-1. , -0.5,  0. ,  0.5,  1. ]])

x对应网格的第一维,y对应网格的第二维。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cmdef f(x, y):# sinc 函数r = np.sqrt(x ** 2 + y ** 2)result = np.sin(r) / rresult[r == 0] = 1.0return resultx_ticks = np.linspace(-10, 10, 51)
y_ticks = np.linspace(-10, 10, 51)x, y = np.meshgrid(x_ticks, y_ticks)z = f(x, y)fig = plt.figure()ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z,rstride=1, cstride=1,cmap=cm.YlGnBu_r)ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
C:\Users\26969\AppData\Local\Temp\ipykernel_14436\1660655670.py:8: RuntimeWarning: invalid value encountered in true_divideresult = np.sin(r) / rText(0.5, 0, 'z')

​[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UosrU7lJ-1670122877118)(https://note-image-1307786938.cos.ap-beijing.myqcloud.com/typora/11%E7%94%9F%E6%88%90%E6%95%B0%E7%BB%84%E7%9A%84%E5%87%BD%E6%95%B0_26_2.png)]

事实上,x, y 中有很多冗余的元素,这里提供了一个 sparse 的选项,在这个选项下,x, y 变成了单一的行向量和列向量。

x_ticks = np.linspace(-1, 1, 5)
y_ticks = np.linspace(-1, 1, 5)x, y = np.meshgrid(x_ticks, y_ticks, sparse=True)
print(x)
print(y)
[[-1.  -0.5  0.   0.5  1. ]]
[[-1. ][-0.5][ 0. ][ 0.5][ 1. ]]

但并不影响结果:

meshgrid 可以设置轴排列的先后顺序:

  • 默认为 indexing='xy' 即笛卡尔坐标,对于2维数组,返回行向量 x 和列向量 y

  • 或者使用 indexing='ij' 即矩阵坐标,对于2维数组,返回列向量 x 和行向量 y。

行向量与列向量

可以使用r_ / c_来产生行向量或者列向量

np.r_[0:1: 0.25]
array([0.  , 0.25, 0.5 , 0.75])
np.r_[0:1:5j]
array([0.  , 0.25, 0.5 , 0.75, 1.  ])

连接多个序列,产生数组:

np.r_[(3, 22, 11), 4.0, [15,6]]
array([ 3., 22., 11.,  4., 15.,  6.])

列向量:

np.c_[1:3:5j]
array([[1. ],[1.5],[2. ],[2.5],[3. ]])

全0或全1数组

ones(shape, dtype=float64)
zeros(shape, dtype=float64)

产生一个制定形状的全 0 或全 1 的数组,还可以制定数组类型:

np.zeros(3)
array([0., 0., 0.])
np.ones([2,3], dtype=np.float32)
array([[1., 1., 1.],[1., 1., 1.]], dtype=float32)

产生一个全是4的数组:

np.ones([2,2]) * 4
array([[4., 4.],[4., 4.]])

空数组

empty(shape, dtype=float64, order='C') 

使用 empty 方法产生一个制定大小的数组,再用 fill 方法填充:

a = np.empty(2)
a
array([inf, inf])
a.fill(5)
a
array([5., 5.])

empty_like, ones_like, zeros_like

empty_like(a)
ones_like(a)
zeros_like(a) 

产生一个跟 a 大小一样,类型一样的对应数组。

a = np.arange(0, 10, 2.5)
a
array([0. , 2.5, 5. , 7.5])
np.empty_like(a)
array([0. , 2.5, 5. , 7.5])
np.zeros_like(a)
array([0., 0., 0., 0.])
np.ones_like(a)
array([1., 1., 1., 1.])

相关内容

热门资讯

关于海南育儿补贴制度实施热点问... 户籍刚迁入海南的婴幼儿是否能享受育儿补贴;如何快速了解补贴申领流程……12月25日,海南省新闻办公室...
宋朝的中介制度 走进《清明上河图》中汴河两岸喧嚷的市集,除了林立的店铺与往来的舟车,还有一种身影穿梭其间——他们并非...
《西安市地下水条例》《西安历史... 央广网西安12月26日消息(记者侯凯奇)12月25日,西安市人大常委会召开新闻发布会,正式公布《西安...
三部门发文完善幼儿园收费政策 ... 近年来,人民群众对适龄儿童“上得起”“上好园”的诉求越来越强烈,幼儿园收费政策需要与时俱进。近日,为...
下一阶段货币政策如何发力?央行... 中国网财经12月26日讯 近日中国人民银行货币政策委员会召开2025年第四季度例会,分析国内外经济金...
跨省盗杀家犬 涉嫌犯罪终落网 山西晚报·山河+讯(记者 辛戈)套牌的汽车、70余支已经装填或待用的毒针、50余颗用剧毒物质自制的药...
政策宣传面对面 就业服务进社区 本报讯(记者 史治国 通讯员 张冬梅)“实实在在的就业创业政策、周边最新的招聘信息,有需要的都看过来...
300元就能看光员工的微信聊天... 据每日经济新闻报道,一款面向公司用户、单套价格或不足300元的监控软件正在被公开售卖。 记者深入调查...
罕见!深交所凌晨发函,剑指向日... 向日葵(300111)又摊上事儿了!12月26日凌晨,深交所对向日葵下发关注函。 2025年9月2...
阅读中的风景与旅途中的阅读:《... 2025年12月,《全民阅读促进条例》(以下简称《条例》)正式颁布,定于2026年2月1日起施行。这...