【问题标题】:Trying to understand this statement in Python试图在 Python 中理解这个语句
【发布时间】:2017-11-28 18:12:06
【问题描述】:

我在 Python 中遇到了以下语句:

a = m[:,1].a - m[:,0].a

如果我删除 .a 部分,我知道我们正在尝试从第二列中减去数组中的第一列。

添加.a 有什么作用?

谢谢。

【问题讨论】:

  • 你能展示一下m 的样子吗?
  • .a 正在访问m[:,1] 返回的任何属性我只能假设它是一些object dtype。
  • 不,您正在从切片返回的任何内容中减去 a 属性的值。
  • 切片是否允许在语法中使用逗号......对python不太熟悉
  • @Naidu 从技术上讲,它将切片的 tuple 传递给my_obj.__getitem__,您可以实现__getitem__ 来接受您想要的任何内容。 numpy.ndarray 对象允许切片元组进行多维切片。

标签: python arrays numpy matrix


【解决方案1】:

在写我的评论时,我意识到这个符号与 recarray 一致。

用几个字段定义一个数据类型

In [28]: dt = np.dtype([('a',int),('b',float)])

用这个dtype初始化一个recarray

In [29]: arr = np.ones((3,2), dtype=dt).view(np.recarray)
In [30]: arr['a'] = np.arange(6).reshape(3,2)
In [31]: arr
Out[31]: 
rec.array([[(0,  1.), (1,  1.)],
           [(2,  1.), (3,  1.)],
           [(4,  1.), (5,  1.)]], 
          dtype=[('a', '<i4'), ('b', '<f8')])
In [32]: arr.a
Out[32]: 
array([[0, 1],
       [2, 3],
       [4, 5]])

可以使用arr['a']arr.a(结构化数组或recarray 属性)访问第一个字段。现在我们可以写一个像你这样的表达式:

In [34]: arr[:,0].a - arr[:,1].a
Out[34]: array([-1, -1, -1])

结构化数组在 SO 上很常见,尤其是在从 CSV 文件加载数据时。 recarray 变体实际上可能更旧,但已不再使用。例如,recfunctions 库需要特殊的导入。显然属性符号并没有那么特殊或有用。

如果这不正确,您需要告诉我们更多关于报价来源的信息。

【讨论】:

    猜你喜欢
    • 2011-01-18
    • 2011-03-30
    • 2020-04-11
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2011-12-29
    相关资源
    最近更新 更多