Python 如何分割由numpy.void数字组成的numpy.ndarray?

Python 如何分割由numpy.void数字组成的numpy.ndarray?,python,numpy,matrix,array-broadcasting,Python,Numpy,Matrix,Array Broadcasting,所以这里的交易是:我有一个变量x,它是一个numpy.ndarray。这个结构的尺寸是1000。如果我做了x[0],那么我会得到一个numpy.void,共4个数字。如果我做了x[1],那么我会得到另一个numpy.void,也是4个数字,以此类推 我只想做的是:我想对这个数据结构进行切片,以便提取一个1000x3大小的numpy矩阵 我该怎么做?谢谢听起来你有一个结构化的数组,就像下面这个简单的例子: In [158]: x = np.ones((5,), dtype='i,i,f,f') I

所以这里的交易是:我有一个变量
x
,它是一个
numpy.ndarray
。这个结构的尺寸是1000。如果我做了
x[0]
,那么我会得到一个
numpy.void
,共4个数字。如果我做了
x[1]
,那么我会得到另一个
numpy.void
,也是4个数字,以此类推

我只想做的是:我想对这个数据结构进行切片,以便提取一个1000x3大小的numpy矩阵


我该怎么做?谢谢

听起来你有一个结构化的数组,就像下面这个简单的例子:

In [158]: x = np.ones((5,), dtype='i,i,f,f')
In [159]: x
Out[159]: 
array([(1, 1,  1.,  1.), (1, 1,  1.,  1.), (1, 1,  1.,  1.),
       (1, 1,  1.,  1.), (1, 1,  1.,  1.)], 
      dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<f4'), ('f3', '<f4')])
In [160]: x[0]
Out[160]: (1, 1,  1.,  1.)
In [161]: type(x[0])
Out[161]: numpy.void
当“列”应该包含不同的内容时,这很方便,例如一个列中包含字符串,另一个列中包含整数。但是,将这样的数组转换为相同数值类型的二维数组可能会很尴尬

view
astype
在有限的情况下工作,但是
tolist
是我所知道的最健壮的转换介质

In [179]: x.tolist()
Out[179]: 
[(1, 10, 0.0, 1.0),
 (1, 12, 1.0, 1.0),
 (1, 8, 2.0, 1.0),
 (1, 0, 3.0, 1.0),
 (1, 3, 4.0, 1.0)]
In [180]: np.array(x.tolist())
Out[180]: 
array([[  1.,  10.,   0.,   1.],
       [  1.,  12.,   1.,   1.],
       [  1.,   8.,   2.,   1.],
       [  1.,   0.,   3.,   1.],
       [  1.,   3.,   4.,   1.]])
请注意,结构化数组的
tolist
是元组列表,而2d数组的
tolist
是列表列表。朝这个方向走,差别不重要。相反,差异很重要


您是如何生成此数组的?从带有
genfromtxt
csv
?作为其他数字包的输出?

Jesus christ。这正是我需要的。非常感谢你!!我没有生成它,而是交给我的。:)我不认为如果我有能力产生它,我会用这种方式把它复杂化。
In [179]: x.tolist()
Out[179]: 
[(1, 10, 0.0, 1.0),
 (1, 12, 1.0, 1.0),
 (1, 8, 2.0, 1.0),
 (1, 0, 3.0, 1.0),
 (1, 3, 4.0, 1.0)]
In [180]: np.array(x.tolist())
Out[180]: 
array([[  1.,  10.,   0.,   1.],
       [  1.,  12.,   1.,   1.],
       [  1.,   8.,   2.,   1.],
       [  1.,   0.,   3.,   1.],
       [  1.,   3.,   4.,   1.]])