从另一个数组明显创建数组?

Apparent creation of array from another array?

我有以下来自 SciPy 的代码片段:

resDat = data[scipy.random.randint(0,N,(N,))]

我试图理解的是这条线是如何工作的以及为什么工作。 randint 函数似乎 return 数据范围内的 N 整数值列表,所以我将这行代码解释为 resDat 将成为一个数组,其中 N 个随机值来自 data。 我试图在 Python shell:

中复制它
a=[1,2,3,4,5,6]
b=[1,2]
c=a[b]

但是,如果我尝试这样做,我会在第 3 行收到错误

TypeError: list indices must be integers, not list

据我所知,我需要给它一个数字而不是一个列表。但是为什么顶部的那条线在工作呢?我觉得我错过了一些重要的区别,但无法弄清楚是哪一个。
来自主要的 .NET 背景第一行看起来有点像 LinQ 语句,但它具有可比性吗?

我相信数据的类型是 -

numpy.ndarray

你可以做 type(data) 结果应该是 numpy.ndarray .

另外,scipy.random.randint() 也是 returns 类型 numpy.ndarray 的值。

你可能做不到 lst[[1,2]] ,但你可以使用 numpy.ndarray 作为另一个 numpy.ndarray 的下标。

一个简单的例子-

import numpy as np
data = np.array([10,15,20,25,30])
print(data[np.array([1,2,3])])
>> array([15,20,25])