我知道像这样的语句x[['col1','col2']]可用于从 numpy 记录数组中选择列。我的问题是如何对记录数组的单行执行相同的操作。这是我想做的事情:
Python 2.7.7 (default, Jun 2 2014, 01:41:14)
[...]
IPython 2.1.0 -- An enhanced Interactive Python.
[...]
In [1]: import numpy as np
In [2]: x = np.ones(3, dtype=[('a',float),('b',float),('c',int)])
In [3]: x[['b','c']][0]
Out[3]: (1.0, 1)
In [4]: row0 = x[0]
In [5]: row0['b']
Out[5]: 1.0
In [6]: row0['c']
Out[6]: 1
In [7]: row0[['b','c']]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-7-287722bfeeaa> in <module>()
----> 1 row0[['b','c']]
IndexError: invalid index
Run Code Online (Sandbox Code Playgroud)
我希望最后一条语句给出结果(1.0, 1),但我得到了上面显示的错误。如何从中提取指定的列row0?
我的实际应用程序有更多的列,我需要哪些列取决于我所在的行,因此我无法在行之前选择列。由于等效的row0[['b','c']]将被执行多次,我想避免在这里使用 python 循环。
我的部分问题可能是我不知道 的数据类型row0:
In [8]: row0
Out[8]: (1.0, 1.0, 1)
In [9]: row0.dtype
Out[9]: dtype([('a', '<f8'), ('b', '<f8'), ('c', '<i8')])
Run Code Online (Sandbox Code Playgroud)
row0有一个dtype,所以它显然不是一个普通的 Python 元组。但它似乎也不是一个 numpy 数组:
In [10]: type(row0)
Out[10]: numpy.void
Run Code Online (Sandbox Code Playgroud)
问题是,当你这样做时,x[0]你会得到一个np.void带有ndim=0. 您可以x[0:1]改为使用 来获取np.ndarray对象ndim=1,它将接受列选择:
r0 = x[0:1]
r0[['b', 'c']]
#array([(1.0, 1)],
# dtype=[('b', '<f8'), ('c', '<i4')])
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您还可以将 转换np.void为 a :np.ndarray
r0 = x[0]
r0 = r0.reshape(-1)
Run Code Online (Sandbox Code Playgroud)
它将接受列选择。
| 归档时间: |
|
| 查看次数: |
3561 次 |
| 最近记录: |