Python numpy返回相同代码的1d数组和2d数组

Python numpy返回相同代码的1d数组和2d数组,python,arrays,numpy,Python,Arrays,Numpy,我真的不知道numpy在执行一些2d数组操作时遵循哪些规则,这些操作涉及将结果返回为1d或2d数组。让我们考虑下面的代码 idx_cls_samples = sample_data[:, -1] == c v_feature = sample_data[idx_cls_samples, f] f_values = sample_data[[sample_data[:, -1] == c], f] 请注意,最后一行只是合并为一行的前两行 前两行的结果是数组形式的numpy向量([1,2,3,…

我真的不知道numpy在执行一些2d数组操作时遵循哪些规则,这些操作涉及将结果返回为1d或2d数组。让我们考虑下面的代码

idx_cls_samples = sample_data[:, -1] == c
v_feature = sample_data[idx_cls_samples, f]

f_values = sample_data[[sample_data[:, -1] == c], f]
请注意,最后一行只是合并为一行的前两行

前两行的结果是数组形式的numpy向量([1,2,3,…]),最后一行的结果是数组([1,2,3,…]),我相信在这两种情况下,结果都应该是数组([1],[2],[3],…])。我如何事先知道numpy将选择何种格式返回结果

请注意,最后一行只是合并为一行的前两行

不,不是。您在其中附加了一对支架:

f_values = sample_data[[sample_data[:, -1] == c], f]
#                      ^                       ^
把它们拿出来


至于索引规则,这些规则在中。它们很长。

样本数据是二维的<代码>样本数据[:,-1]
是1d,最后一列。使用标量索引将删除维度

…=c
生成相同维度(1d)的布尔值

sample_data[:,f]
也是一个1d,即
fth

使用布尔数组对其进行索引将返回与布尔值维度相同的结果,但只是值的子集

sample\u数据[idx,f]
是1d,
sample\u数据[idx],f]
是2d(由于添加了
[]

您可能希望,
sample\u data[(sample\u data[:,-1]==c),f]
,其中
()
只是对字符串进行分组,有时是为了运算符优先级,有时只是为了更具可读性。(但要注意构成元组的
(…,)

sample_data[idx,[f]]
将为您提供“vector”列,2d和1列

查看样本数据[idx,f]的另一种方法是:
idx
选择行的子集,
f
从该2d中选择列


通常2d(或更高的nd)索引可以逐轴研究;对于索引是标量或切片,尤其如此。如果一个索引是一个列表或数组,或者更糟糕的是,是其中的两个或更多,那么它就更复杂了。

最后一行不太一样,
sample\u data[sample\u data[:,-1]==c,f]
应该是一样的(去掉一组额外的括号),谢谢你指出这一点。