【发布时间】:2026-01-12 01:10:01
【问题描述】:
我正在尝试在 numpy 中随机选择一组整数,但遇到了一个奇怪的错误。如果我定义具有两组不同大小的 numpy 数组,np.random.choice 可以毫无问题地在它们之间进行选择:
Set1 = np.array([[1, 2, 3], [2, 4]])
In: np.random.choice(Set1)
Out: [4, 5]
但是,一旦 numpy 数组是相同大小的集合,我就会得到一个值错误:
Set2 = np.array([[1, 3, 5], [2, 4, 6]])
In: np.random.choice(Set2)
ValueError: a must be 1-dimensional
可能是用户错误,但我检查了几次,唯一的区别是集合的大小。我意识到我可以这样做:
Chosen = np.random.choice(N, k)
Selection = Set[Chosen]
N 是集合的数量,k 是样本的数量,但我只是想知道是否有更好的方法,特别是当集合为大小一样。
Set1 和 Set2 的打印输出供参考:
In: Set1
Out: array([list([1, 3, 5]), list([2, 4])], dtype=object)
In: type(Set1)
Out: numpy.ndarray
In: Set2
Out:
array([[1, 3, 5],
[2, 4, 6]])
In: type(Set2)
Out: numpy.ndarray
【问题讨论】:
-
你真的打印了数组吗? dtype 不同。 Numpy 实际上并不支持参差不齐的数组,所以你的第一个数组不是你想的那样。
-
哦,谢谢。是的,当我打印第一个 Set 时,它作为两个列表的数组出现,而非参差不齐的数组显示没有列表的数组。但是当我检查类型时,两者都是 numpy.ndarrays。我将编辑问题以显示打印输出。
-
Type 是 python 的概念,dtype 是 numpy 的概念。来自
np.array的所有内容都是np.ndarray。但是任何带有dtype=object的东西都不是一个数组。它实际上更像是一个可以修改内容但不能修改大小的 python 列表,而且通常速度较慢。