对于 numpy 模块,我可以用两行来完成:
x=np.zeros(10)
x[4]=1
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否可以将两者结合在一起
有多种方法可以做到这一点。例如,为您提供一个包含除位置 4 之外的所有值np.arange(10) == 4
的数组。False
True
在幕后,NumPy 的bool
值只是0
和1
as uint8
(就像 Python 的bool
值是0
和1
,尽管是唯一的整数类型),因此您可以在任何表达式中按原样使用它:
>>> np.arange(10) == 4\narray([False, False, False, False, True, False, False, False, False, False], dtype=bool)\n>>> np.arange(10) * 1\narray([0, 0, 0, 0, 1, 0, 0, 0, 0, 0])\n>>> np.arange(10) + 23\narray([23, 23, 23, 23, 24, 23, 23, 23, 23, 23])\n
Run Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6 或view
它uint8
代替bool
:
>>> (np.arange(10) == 4).view(np.uint8)\narray([0, 0, 0, 0, 1, 0, 0, 0, 0, 0], dtype=uint8)\n
Run Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\xa6 或者,如果你想要正常值int
,你可以转换它:
>>> (np.arange(10) == 4).astype(int)\n
Run Code Online (Sandbox Code Playgroud)\n\n\xc2\xa0 \xc2\xa0 数组([0, 0, 0, 0, 1, 0, 0, 0, 0, 0])
\n\n等等。
\n\n然而,这似乎可读性较差,而且在快速测试中速度也慢了 20% 左右,所以除非您这样做是出于代码高尔夫的原因,为什么呢?
\n