使用空 ndarray 进行 numpy 索引的奇怪事情

Dir*_*aul 5 python indexing numpy python-2.7

当我进行 numpy 索引时,有时索引可能是一个空列表,这样我希望 numpy 也返回一个空数组。例如:

\n\n
a = np.array([1, 2, 3])\n\nb = []\n\nprint a[b]\n
Run Code Online (Sandbox Code Playgroud)\n\n

这工作得很好!当结果给我时:

\n\n
result:[]\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是当我使用 ndarray 作为索引器时,奇怪的事情发生了:

\n\n
a = np.array([1, 2, 3])\n\nb = []\n\nc = np.array(b)\n\nprint a[c]\n
Run Code Online (Sandbox Code Playgroud)\n\n

这给了我一个错误:

\n\n
IndexError: arrays used as indices must be of integer (or boolean) type\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,当我这样做时:

\n\n
a = np.array([1, 2, 3])\n\nb = []\n\nd = np.arange(0, a.size)[b]\n\nprint a[d]\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后它再次完美运行:

\n\n
result:[]\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是当我检查 c 和 d 的类型时,它们返回相同的!甚至形状和一切:

\n\n
print type(c), c.shape\n\nprint type(d), d.shape\n\nresult\xef\xbc\x9a<type 'numpy.ndarray'> (0L,)\n\nresult\xef\xbc\x9a<type 'numpy.ndarray'> (0L,)\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以我想知道这是否有什么问题?为什么 a[c] 不起作用但 a[d] 起作用?你能为我解释一下吗?谢谢你!

\n

piR*_*red 3

numpy 不知道空数组是什么类型。

尝试:

c = np.array(b, dtype=int)
Run Code Online (Sandbox Code Playgroud)