如何使用numpy在一行中创建大小为10但第五个值为1的空向量

use*_*991 5 python numpy

对于 numpy 模块,我可以用两行来完成:

x=np.zeros(10)
x[4]=1
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否可以将两者结合在一起

aba*_*ert 4

有多种方法可以做到这一点。例如,为您提供一个包含除位置 4 之外的所有值np.arange(10) == 4的数组。FalseTrue

\n\n

在幕后,NumPy 的bool值只是01as uint8(就像 Python 的bool值是01,尽管是唯一的整数类型),因此您可以在任何表达式中按原样使用它:

\n\n
>>> 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 或viewuint8代替bool

\n\n
>>> (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,你可以转换它:

\n\n
>>> (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

  • `(np.arange(10) == 4).astype(int)` 更快。 (2认同)
  • 而 `(np.arange(10) == 4).view(np.uint8)` 可能更快。 (2认同)