【问题标题】:Why is the shape of this array not two-dimensional?为什么这个数组的形状不是二维的?
【发布时间】:2021-06-03 17:20:56
【问题描述】:

使用 Numpy,我尝试从数据框中的一列创建一个数组。我创建的这个数组,然而,它的大小是 (48,),其中 48 是行数,而不是我预期的 (48,1)。为什么会这样?我认为从 numpy 数据框创建的任何数组都必须具有定义的行数和列数

下面是df代表的相关代码、输出和数据集

y = df.iloc[:, -1]

a=y.shape//Output is (48,)

00  0   1
0   1   0.0 45.0
1   1   0.0 48.0
2   1   0.5 67.0
3   1   1.5 59.5
4   1   1.5 62.4
5   1   1.5 84.4
6   1   1.5 82.0
7   1   1.5 79.5
8   1   3.0 64.8
9   1   3.0 67.4
10  1   3.0 82.6
11  1   3.0 78.2
12  1   3.0 80.4
13  1   3.5 71.3
14  1   3.5 70.5
15  1   3.5 75.0
16  1   3.5 80.9
17  1   3.5 83.2
18  1   4.0 78.4
19  1   4.0 74.2
20  1   4.0 81.5
21  1   4.0 68.9
22  1   4.5 68.3
23  1   4.5 78.5
24  1   4.5 75.9
25  1   4.5 81.6
26  1   4.5 83.2
27  1   4.5 86.1
28  1   4.5 87.4
29  1   5.0 72.8
30  1   5.0 75.0
31  1   5.0 75.6
32  1   5.0 79.3
33  1   5.0 82.4
34  1   5.0 86.3
35  1   5.0 90.2
36  1   5.0 93.4
37  1   5.5 79.5
38  1   5.5 81.4
39  1   5.5 83.2
40  1   5.5 85.7
41  1   5.5 91.4
42  1   5.5 98.5
43  1   5.5 94.3
44  1   6.0 81.2
45  1   6.0 85.4
46  1   6.0 91.0
47  1   6.0 94.3

【问题讨论】:

  • 虽然来自整个数据帧的数组是 2d,但来自 Series 的数组是 1d。在numpy 中,像 (48,) 这样的形状比 (48,1) 更常见。当broadcasting a (48,) 可以扩展为 (1,48)。但是很容易将形状更改为 (48,1),例如y[:,None]
  • 您可以使用np.reshape() 更改数组数据的形状。

标签: python arrays pandas dataframe numpy


【解决方案1】:

结果是一维数组。如果它的长度是 N,那么它可以表示为 N×1 或 1×N 向量,正如我们在线性代数课中所说的那样。但是这种方法有一些我们不想在编码中处理的问题。

问题1。我们需要选择答案是N×1还是1×N向量并坚持下去。但是,有时我们会偏爱一个而不是另一个,因此,我们需要执行额外的操作。

问题2。如果数组的大小为(1, N) 或(N, 1),我们需要使用两个索引来访问它的元素,例如arr[0, N-1]arr[N-1, 0]。这很令人困惑——毕竟,它是一个一维向量,一个索引就足够了。我们希望以arr[N-1] 的形式访问其元素,即通过使用单个索引。在线性代数符号中,这意味着形状是(N),看起来很尴尬。形状是一个元组,一个元素的元组用逗号写成(N, ).

这样的转折解决了这个问题。现在我们可以使用左右两边的线性乘法,并使用单个索引访问元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-28
    • 2014-03-08
    • 2012-07-04
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多