所以我意识到以下两个片段生成数组[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.arange
和np.linspace
是创建规则间隔值的基本函数。了解它们的差异。请注意arange
关于分数阶跃的警告。
新手经常会为浮点问题而烦恼,比如当他们查看np.arange(0,1,.1).tolist()
时。
np.r_
(以及np.c_
、np.ogrid
、np.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