Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 二维结构阵列_Python 2.7_Numpy_Structured Array - Fatal编程技术网

Python 2.7 二维结构阵列

Python 2.7 二维结构阵列,python-2.7,numpy,structured-array,Python 2.7,Numpy,Structured Array,我正在尝试用Python构建一个结构化数组,可以通过列和行的名称访问该数组。使用numpy的结构化数组方法是否可以实现这一点 例如: 我的数组应该大致具有以下形式: My_array = A B C E 1 2 3 F 4 5 6 G 7 8 9 我想有可能做到以下几点: My_array["A"]["E"] = 1 My_array["C"]["F"] = 6 在pyhto

我正在尝试用Python构建一个
结构化数组
,可以通过列和行的名称访问该数组。使用numpy的
结构化数组
方法是否可以实现这一点

例如: 我的数组应该大致具有以下形式:

My_array =        A B C 
                E 1 2 3 
                F 4 5 6 
                G 7 8 9 
我想有可能做到以下几点:

My_array["A"]["E"] = 1
My_array["C"]["F"] = 6

在pyhton中是否可以使用
结构化数组执行此操作,或者是否有另一种类型的结构更适合执行此任务?

通过重新排列,您可以使用点符号或特定参考列名访问列。对于行,它们是通过行号访问的。我没有看到通过行名称访问它们,例如:

>>> import numpy as np
>>> a = np.arange(1,10,1).reshape(3,3)
>>> dt = np.dtype([('A','int'),('B','int'),('C','int')])
>>> a.dtype = dt
>>> r = a.view(type=np.recarray)
>>> r
rec.array([[(1, 2, 3)],
       [(4, 5, 6)],
       [(7, 8, 9)]], 
      dtype=[('A', '<i4'), ('B', '<i4'), ('C', '<i4')])
>>> r.A
array([[1],
       [4],
       [7]])
>>> r['A']
array([[1],
       [4],
       [7]])
>>> r.A[0]
array([1])
>>> a['A'][0]
array([1])
>>> # now for the row
>>> >>> r[0]
rec.array([(1, 2, 3)], 
      dtype=[('A', '<i4'), ('B', '<i4'), ('C', '<i4')])
>>>
>>将numpy作为np导入
>>>a=np.arange(1,10,1)。重塑(3,3)
>>>dt=np.dtype([('A','int'),('B','int'),('C','int'))
>>>a.dtype=dt
>>>r=a.view(类型=np.recarray)
>>>r
记录数组([(1,2,3)],
[(4, 5, 6)],
[(7, 8, 9)]], 

dtype=[('A','基本结构化数组提供了可以用一个名称索引的内容:

In [276]: dt=np.dtype([('A',int),('B',int),('C',int)])
In [277]: x=np.arange(9).reshape(3,3).view(dtype=dt)
In [278]: x
Out[278]: 
array([[(0, 1, 2)],
       [(3, 4, 5)],
       [(6, 7, 8)]], 
      dtype=[('A', '<i4'), ('B', '<i4'), ('C', '<i4')])

In [279]: x['B']   # index by field name
Out[279]: 
array([[1],
       [4],
       [7]])

In [280]: x[1]    # index by row (array element)
Out[280]: 
array([(3, 4, 5)], 
      dtype=[('A', '<i4'), ('B', '<i4'), ('C', '<i4')])

In [281]: x['B'][1]
Out[281]: array([4])

In [282]: x.shape    # could be reshaped to (3,)
Out[282]: (3, 1)
也可以构造基本的结构化数组

In [287]: np.ones((3,),dtype=dt)
Out[287]: 
array([(1, 1, 1), (1, 1, 1), (1, 1, 1)], 
      dtype=[('A', '<i4'), ('B', '<i4'), ('C', '<i4')])
[287]中的
:np.one((3,),dtype=dt)
Out[287]:
数组([(1,1,1),(1,1,1),(1,1,1)],

数据类型=[('A',你可以使用@yangjie tanks,
pandas
看起来很不错。但是,我必须通过MPI接口传递这些数据
numpy
将是一个很好的解决方案,因为它们更快更容易通过接口。谢谢你的建议。我想我可以解决列的索引问题。但是,如果我使用
np.zeros((3,3))
我得到了一个数组,它一行有两个三元组:
[(0.0,0.0,0.0),(0.0,0.0,0.0)]
。但我只想要一个三元组。
dtype=[('a',np.float),('B',np.float),('C',np float)]
解决了这个问题。有人能告诉我为什么吗?swot我正在将行内容添加到我原来的post中,不能在注释中正确格式化,所以请容忍我。要从[299]:z=y.view(type=np.recarray)中的第298行继续,然后在[300]:z.a['F']或[3XX]:z.a.F数组中(1)重新排列只需添加简单排列['field'的功能使用arry.field表示法,因此z.A.F“看起来”比slice等价物更好,我的
dt2
dtype可以转换为
recarray
,并使用
x.A.F
访问。数据类型越复杂,
recarray
看起来就越好。@hpaulj感谢对不同可能性的讨论。我不知道这种可能性ty嵌套
dtypes
。也许,稍后我会试用嵌套
dtypes
的上一个建议。
In [283]: x1 = np.arange(9).reshape(3,3)
In [284]: x2=np.array([tuple(i) for i in x1],dtype=dt)
In [285]: x2
Out[285]: 
array([(0, 1, 2), (3, 4, 5), (6, 7, 8)], 
      dtype=[('A', '<i4'), ('B', '<i4'), ('C', '<i4')])
In [286]: x2.shape
Out[286]: (3,)
In [287]: np.ones((3,),dtype=dt)
Out[287]: 
array([(1, 1, 1), (1, 1, 1), (1, 1, 1)], 
      dtype=[('A', '<i4'), ('B', '<i4'), ('C', '<i4')])
In [294]: dt1=np.dtype([('D',int),('E',int),('F',int)])

In [295]: dt2=np.dtype([('A',dt1),('B',dt1),('C',dt1)])

In [296]: y=np.ones((),dtype=dt2)

In [297]: y
Out[297]: 
array(((1, 1, 1), (1, 1, 1), (1, 1, 1)), 
      dtype=[('A', [('D', '<i4'), ('E', '<i4'), ('F', '<i4')]), ('B', [('D', '<i4'), ('E', '<i4'), ('F', '<i4')]), ('C', [('D', '<i4'), ('E', '<i4'), ('F', '<i4')])])

In [298]: y['A']['F']
Out[298]: array(1)