使用np.r_r和np.arange创建数组有什么区别



所以我意识到以下两个片段生成数组[0,0.001,0.002…]。创建数组的两种方法中哪一种是最佳实践,有什么区别?如果np.r[0:1:0001]应该用于行串联,为什么它能工作?

a = np.arange(0, 1, 0.001)

b = np.r_[0:1:0.001]

我还想知道为什么这两种类型都是:numpy.ndarray.,但打印出来的都是假的

if b is a:
print(True)
else:
print(False)

np.arangenp.linspace是创建规则间隔值的基本函数。了解它们的差异。请注意arange关于分数阶跃的警告。

新手经常会为浮点问题而烦恼,比如当他们查看np.arange(0,1,.1).tolist()时。

np.r_(以及np.c_np.ogridnp.mgrid(使用索引语法来访问串联和范围。它并不优越;它只是不同,而且可能很方便。

对于np.r_[0:1:0.001],它确实像您一样调用arange。对于"0:1:11",它将使用linspace。连接功能可以让您执行以下操作:

In [19]: np.r_[0:3, 3:5:5j]
Out[19]: array([0. , 1. , 2. , 3. , 3.5, 4. , 4.5, 5. ])
In [20]: np.concatenate((np.arange(3),np.linspace(3,5,5)))
Out[20]: array([0. , 1. , 2. , 3. , 3.5, 4. , 4.5, 5. ])

如果arange(和linspace(可以满足您的需要,则无需使用np.r_

is不是正确的比较工具。您还可以使用获得False

a = np.arange(0, 1, 0.001)
b = np.arange(0, 1, 0.001)
a is b
# False

这只是意味着对象不相同,而不是它们的值不同

使用numpy.allclose:

a = np.arange(0, 1, 0.001)
b = np.r_[0:1:0.001]
np.allclose(a,b)

输出:True

最新更新