gpt4 book ai didi

python 为什么使用 numpy.r_ 而不是连接

转载 作者:太空狗 更新时间:2023-10-29 17:39:36 24 4
gpt4 key购买 nike

在哪种情况下,使用像 numpy.r_ 或 numpy.c_ 这样的对象比使用像 concatenate 或 vstack 这样的函数更好(更有效,更合适)?

我试图理解程序员写的代码,例如:

return np.r_[0.0, 1d_array, 0.0] == 2

其中 1d_array 是一个数组,其值可以是 0、1 或 2。为什么不使用 np.concatenate (例如)代替?喜欢:

return np.concatenate([[0.0], 1d_array, [0.0]]) == 2

它更具可读性,显然它做了同样的事情。

最佳答案

np.r_numpy/lib/index_tricks.py 文件中实现。这是纯 Python 代码,没有特殊的编译内容。因此,它不会比使用 concatenatearangelinspace 编写的等价物更快。只有当符号符合您的思维方式和需求时,它才有用。

在您的示例中,它只是将标量转换为列表或数组:

In [452]: np.r_[0.0, np.array([1,2,3,4]), 0.0]
Out[452]: array([ 0., 1., 2., 3., 4., 0.])

相同参数的错误:

In [453]: np.concatenate([0.0, np.array([1,2,3,4]), 0.0])
...
ValueError: zero-dimensional arrays cannot be concatenated

正确添加[]

In [454]: np.concatenate([[0.0], np.array([1,2,3,4]), [0.0]])
Out[454]: array([ 0., 1., 2., 3., 4., 0.])

hstack 通过将所有参数传递给 [atleast_1d(_m) for _m in tup] 来处理这个问题:

In [455]: np.hstack([0.0, np.array([1,2,3,4]), 0.0])
Out[455]: array([ 0., 1., 2., 3., 4., 0.])

所以至少在简单的情况下它最类似于hstack

但是 r_ 的真正用处在于当您想要使用范围时

np.r_[0.0, 1:5, 0.0]
np.hstack([0.0, np.arange(1,5), 0.0])
np.r_[0.0, slice(1,5), 0.0]

r_ 允许您使用在索引中使用的 : 语法。那是因为它实际上是具有 __getitem__ 方法的类的实例。 index_tricks 多次使​​用这个编程技巧。

他们还加入了其他铃声和口哨声

使用一个虚构的步骤,使用np.linspace而不是np.arange来扩展切片。

np.r_[-1:1:6j, [0]*3, 5, 6]

产生:

array([-1. , -0.6, -0.2,  0.2,  0.6,  1. ,  0. ,  0. ,  0. ,  5. ,  6. ])

文档中有更多详细信息。

我对 https://stackoverflow.com/a/37625115/901925 中的许多切片做了一些时间测试

关于python 为什么使用 numpy.r_ 而不是连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37743843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com