【问题标题】:Why is len(a[0]) different from a.shape[1]为什么 len(a[0]) 与 a.shape[1] 不同
【发布时间】:2019-11-10 03:59:34
【问题描述】:

我有一个矩阵“a”,它具有以下属性:

一个形状

(3, 220)

a.shape[1]

220

len(a)

3

len(a[0])

1

a[0].shape

(1, 220)

我不明白为什么 len(a[0]) 与 a.shape[1] 不同。似乎我永远无法访问子数组 a[0]。请帮助我理解为什么会这样。谢谢!

【问题讨论】:

  • 那是因为您使用的是numpy.matrix。这是您不应该使用numpy.matrix 的原因之一。停止使用numpy.matrix

标签: python arrays numpy matrix


【解决方案1】:

注意,numpy 建议 here 不应该使用 np.matrix,而只使用数组:

不再推荐使用这个类,即使是线性代数。而是使用常规数组。将来可能会删除该类。

如果您查看a[0] 是什么,就会发现问题所在。让我们以更小的尺寸实现它,以便更容易可视化:

import numpy as np

# I'm using all zeros here for simplicity
y = np.matrix(np.zeros((5, 10)))

y.shape
(5, 10)

y[0]
matrix([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])

y[0] 是一个由 1 行 10 列组成的矩阵

y[0].shape
(1, 10)

如果你使用np.array,你就完全避免了这个问题

x = np.zeros((5, 10))

x.shape
(5, 10)

len(x[0])
10

x[0].shape
(10,)

【讨论】:

    【解决方案2】:

    作为user2357112 pointed out,问题似乎是您使用的是numpy.matrix 而不是numpy.ndarray(通过numpy.array)。

    Numpy 文档中关于matrix 的内容如下:

    不再推荐使用这个类,即使是线性代数。而是使用常规数组。将来可能会删除该类。

    一个常规的 Numpy 数组是 very similar 到一个矩阵,但可以有任意数量的维度,并且使用 @ 运算符而不是 * 来进行矩阵乘法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 2019-03-07
      • 2019-01-15
      • 2015-07-27
      • 2021-12-05
      • 2017-03-21
      • 1970-01-01
      相关资源
      最近更新 更多