我有一门课,比如:
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
可能不太优雅,但能胜任。谢谢大家!在
你可以创建一个结构化的numpy数组。向dtype传递字段名和数据类型的元组列表。然后,可以通过按字段名为数组编制索引来访问给定字段的完整数组。重做示例:
.A
属性属于ArrayA
的每个单独元素,而不是整个数组。因此,ArrayA[0,0].A
是有效的,因为ArrayA[0,0]
指向MyClass
的一个实例,但是ArrayA[:,:]
返回原始ndarray
的副本。在我会考虑重新组织您的数据,以便您将}的优势)。在
.A
属性中的所有内容保留在单个numpy数组中,.B
中的所有内容都保存在单个numpy数组中,等等。这将有两个好处:1)您可以使用where
,2)numpy数组将是dtype=float
(如果必须使用numpy
,那么就失去了{相关问题 更多 >
编程相关推荐