numpy数组中类的属性

2024-05-28 23:32:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一门课,比如:

class MyClass:
 def __init__( self, params):
   self.A = params[0]
   self.B = params[1]
   self.C = params[2]

以及从此类实例生成的numpy数组:

^{pr2}$

我想检索ArrayA的“MyClass.B”,其中“MyClass.A”是最小值,所以我做了:

WhereMin = np.where(ArrayA[:,:].A)
MinB = ArrayA[WhereMin].B

但这行不通。有什么想法吗?在

编辑: 当我运行上述代码时,我得到以下错误:

----> WhereMin = np.nanmin(ArrayA[:,:].A)
AttributeError: 'numpy.ndarray' object has no attribute 'A'

当我期望得到一个索引数组在“MinB”中使用时。在

可能的解决方案 我找到了解决问题的可能办法:

Min = np.nanmin([[x.A for x in XX] for XX in ArrayA])
XXX = [[x for x in XX if x.A == Min] for XX in ArrayA]
MinB = [XX for XX in XXX if XX != [] ][0][0].B

可能不太优雅,但能胜任。谢谢大家!在


Tags: inselfnumpyfornpmyclass数组params
2条回答

你可以创建一个结构化的numpy数组。向dtype传递字段名和数据类型的元组列表。然后,可以通过按字段名为数组编制索引来访问给定字段的完整数组。重做示例:

ArrayA = np.zeros((3,4),dtype=[('A','<f4'),('B','<f4'),('C','<f4')])

for ii in range(3):
  for jj in range(4):
    ArrayA[ii,jj] = np.random.rand(3)

minA = ArrayA['A'].min()
WhereMin = np.where(a['A'] == minA)
MinB = ArrayA[WhereMin]['B']

.A属性属于ArrayA的每个单独元素,而不是整个数组。因此,ArrayA[0,0].A是有效的,因为ArrayA[0,0]指向MyClass的一个实例,但是ArrayA[:,:]返回原始ndarray的副本。在

我会考虑重新组织您的数据,以便您将.A属性中的所有内容保留在单个numpy数组中,.B中的所有内容都保存在单个numpy数组中,等等。这将有两个好处:1)您可以使用where,2)numpy数组将是dtype=float(如果必须使用numpy,那么就失去了{}的优势)。在

相关问题 更多 >

    热门问题