我在Python中遇到了以下声明:
a = m[:,1].a - m[:,0].a
如果删除.a
部分,我理解我们正在尝试从第二列中减去数组中的第一列。
添加.a
会有什么作用?
感谢。
答案 0 :(得分:0)
在撰写评论时,我意识到这种符号与recarray
一致。
使用几个字段定义dtype
In [28]: dt = np.dtype([('a',int),('b',float)])
使用此recarray
初始化dtype
:
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
(结构化数组或重新排列属性)访问第一个字段。现在我们可以写一个像你这样的表达式:
In [34]: arr[:,0].a - arr[:,1].a
Out[34]: array([-1, -1, -1])
结构化数组在SO上很常见,尤其是在从CSV文件加载数据时。重组变体实际上可能更老,但已经不再使用了。例如,recfunctions
库需要特殊导入。显然,属性表示法并不特殊或有用。
如果这不对,您需要告诉我们更多有关报价来源的信息。