Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 numpy数组中类的矩阵_Python_Arrays_Class_Numpy_Min - Fatal编程技术网

Python numpy数组中类的矩阵

Python numpy数组中类的矩阵,python,arrays,class,numpy,min,Python,Arrays,Class,Numpy,Min,我有一门课,像: class MyClass: def __init__( self, params): self.A = params[0] self.B = params[1] self.C = params[2] 以及从此类实例构建的numpy数组: import numpy as np ArrayA = np.empty((3,4),dtype = object) for ii in range(3): for jj in range(4): Ar

我有一门课,像:

class MyClass:
 def __init__( self, params):
   self.A = params[0]
   self.B = params[1]
   self.C = params[2]
以及从此类实例构建的numpy数组:

import numpy as np


ArrayA = np.empty((3,4),dtype = object)

for ii in range(3):
  for jj in range(4):
    ArrayA[ii,jj] = MyClass(np.random.rand(3))
我想为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

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

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


我会考虑重新组织你的数据,使你在代码中保留你想要的一切。在一个麻木数组中的< /代码>属性,以及在<代码>中的所有东西。B/<代码在一个麻木数组中,等等。这将有两个好处,1)你可以使用<代码>哪里< < /代码>,和2)你的NUBY数组将是<代码> dType浮标< /代码>。(如果必须使用
dtype=object
,您将失去
numpy
的优势。)

您可以创建一个结构化的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']

ArrayA=np.zero((3,4),数据类型=[('A','What's not work?What's not work?What's not work?What's not work?What's not work?What's not work?What's not work?What's not work?What's not work?是否有错误消息?如果有,请显示它。您是否得到意外的输出?如果有,您得到了什么,您期望得到什么?@SethMMorton:谢谢您指出这一点,我用错误更新了我的问题。这似乎是一(3,4,3)
。其中前两个维度对应于原始的
np.empty(3,4)
数组,最后一个维度包含
np.random.rand(3)
。这可以简单地创建为
ArrayA=np.random.rand(3,4,3)
,然后操作
np.Where(ArrayA[:,:].A)
就是
np.Where(ArrayA[:,:,0]
@Ophion:但这意味着要一起删除我的类,这是我想要避免的。@jorgehumberto Numpy可能不是您在这种情况下想要的解决方案。例如,您建议的解决方案使用Numpy比使用列表更慢。我明白您的观点,但不幸的是,我认为这对我不起作用。我使用Numpy数组为值网格存储对象实例。也许我应该使用不同的方法,比如尝试使用列表列表?这是一个解决方案,但这意味着将我的类全部删除。问题是我使用的“真实”类更复杂,并且用于代码的其他部分,所以我希望避免这种情况。无论如何,谢谢!)根据您希望对类的实例执行数组操作的频率,可以将相关字段存储在numpy结构化数组中,并让类实例在数组中保留索引