numpy生成数组的函数

生成数组的函数

arange

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

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

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

 

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

 

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

 

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

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

linspace

linspace(start, stop, N)

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

 

logspace

logspace(start, stop, N)

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

 产生的值为$\left[10^0, 10^{0.25},10^{0.5},10^{0.75},10^1\right]$

 

meshgrid

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

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

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm

def f(x, y):
    # sinc 函数
    r = np.sqrt(x ** 2 + y ** 2)
    result = np.sin(r) / r
    result[r == 0] = 1.0
    return result

x_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')

 

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

 

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

ogrid , mgrid

Matlab中有 meshgrid 的用法:

meshgrid(-1:.5:1, -1:.5:1)

Numpymeshgrid 并不支持这样的用法,但我们可以使用 ogrid / mgrid 来实现类似这样的用法。

ogridmgrid 的区别在于:

 

  • ogrid 相当于 meshgrid(indexing='ij', sparse=True)
  • mgrid 相当于 meshgrid(indexing='ij', sparse=False)

 

注意:

  • 这里使用的是中括号
  • Matlab 使用的是 start:step:end 的表示,Numpy 使用的是 start:end:step 的表示
  • 这里的结果不包括 end 的值

为了包含 end 的值,我们可以使用这样的技巧:

我们在 step 的位置传入一个复数 5j ,表示我们需要一个 5 个值的数组,此时返回值就会包含 end 的值。

重复之前的画图:

y, x = np.ogrid[-10:10:51j, -10:10:51j]

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')

 

这里,我们交换了 x, y 输出值的顺序。

r_ , c_

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

使用切片产生:

复数步长制定数组长度:

 

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

列向量:

 

ones , zeros

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

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

 

empty

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

也可以使用 empty 方法产生一个制定大小的数组(数组所指向的内存未被初始化,所以值随机),再用 fill 方法填充:

 

 

empty_like, ones_like, zeros_like

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

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

 

identity

indentity(n, dtype=float64)

产生一个 nn 的单位矩阵:

 

 

 

 

 

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值