《番外篇之NumPy库的out参数你是真out呀 😵 》
✋导读👋
最近工作不是很忙,闲来无事儿就找点儿事儿干干,这不又研究起了NumPy科学库。
大家都知道NumPy库它是我们学习Python语言的一个扩展库,而且提供了非常多的数学运算公式,而且还支持大量的数组、矩阵等的运算,非常强悍。想从事人工智能算法岗位的基本上都得知道而且会用这个库,给我们运算大量数据也是带来了巨大的便利性。
但是世界上没有完美的东西,程序也是一样,刚好最近就碰到了一个也就分享出来。
我们一起看看是怎么回事儿吧!
😤 起因
在学习统计函数的时候,遇到了一个小问题,感觉也挺奇怪的。统计函数是干什么用的。
所谓的统计函数,从字面意思我们就能理解就是进行数据的统计呗。没错!是的,我们调用NumPy库提供的已经封装好的函数,得到自己想要的结果。确实挺不错的。比如 amin()函数、amax()函数、ptp()函数等等还有很多,我们就暂时拿这三个函数进行一个讲解。
这三个函数的格式基本上都差不多,这边大概写一下函数格式:
(1).numpy.amin( a, axis=None, out=None, keepdims=np._NoValue, initial=np._NoValue, where=np._NoValue )
(2).numpy.amax( a, axis=None, out=None, keepdims=np._NoValue, initial=np._NoValue, where=np._NoValue )
(3).numpy.amax( a, axis=None,out=None, keepdims=np._NoValue, initial=np._NoValue, where=np._NoValue )
可以看到,这些函数都有共同的参数out=None
,这个参数是选填的,其实我们在日常的开发的过程当中完全是可以忽略的,但是它既然存在那就是合理的。这个参数的意思就是将数组的输出结果存储在一个指定的位置。
于是乎我的代码是这样的:
毫无疑问,控制台报错了,我当时第一时间没有去看报错信息,而是随意瞅了一眼代码,没发现啥问题呀! 按照我的思维,调用函数以后所得的结果直接给返回到我接收的数组当中不就完事儿了吗,这怎么还报错呢?
🧐 思考
难道返回的类型有问题吗?将temp_arr
类型进行打印后,控制台输出的是数组呀,没错呀!
想着那就点到调用层去看看封装函数的解释吧! (ps:因为amax()函数处注释写参阅max函数,那就移步到max()函数查看参数解释)
看到这里是不是恍然大悟了呢,唉!原来是必须要设置一个相同的长度,怎么感觉有些鸡肋呢?直接将返回结果给我赋到创建的数组不就完了呗,还要指定长度?瞬间感觉不香了。
怎么办? 那就改改试试吧。代码如下图同时贴出实例代码有兴趣可以试试:
import numpy as np
s = np.array([[2, 5, 8], [9, 4, 7], [6, 3, 1]])
print('原数组')
print(s)
print('\n')
# 创建一个空数组
temp_arr = np.empty((3,))
# 调用amax()函数
np.amax(s, axis=1, out=temp_arr)
print(temp_arr)
# 原数组
# [[2 5 8]
# [9 4 7]
# [6 3 1]]
#
#
# [8. 9. 6.]
🤗 反思
经过此次调用函数的过程,虽然不是什么大问题。但是对我在编程的道路上还是有一些启发的,在调用任何封装好的函数或者接口之类的时候,不要着急去调用,先去读一读函数如何调用,各个参数都代表什么意思,需要哪种类型,这些都是需要注意的。
送给各位掘友们一句名言,希望各位在以后编程的道路是越来越好。
大成功是成千万个小成功汇聚而成的,引用一句文学家荀子在《劝学》中的一句话:不积跬步,无以至千里;不积小流,无以成江海。
转载自:https://juejin.cn/post/7371040857279643711