Digamos que tengo matrices:cómo hacer de dispersión/agrupación operaciones en numpy
a = array((1,2,3,4,5))
indices = array((1,1,1,1))
y llevo a cabo la operación:
a[indices] += 1
el resultado es
array([1, 3, 3, 4, 5])
en otras palabras, , los duplicados en indices
se ignoran
si quería los duplicados no debe ser ignorado, lo que resulta en:
array([1, 6, 3, 4, 5])
¿cómo iba a ir sobre esto?
el ejemplo anterior es algo trivial, lo que sigue es exactamente lo que estoy tratando de hacer:
def inflate(self,pressure):
faceforces = pressure * cross(self.verts[self.faces[:,1]]-self.verts[self.faces[:,0]], self.verts[self.faces[:,2]]-self.verts[self.faces[:,0]])
self.verts[self.faces[:,0]] += faceforces
self.verts[self.faces[:,1]] += faceforces
self.verts[self.faces[:,2]] += faceforces
def constrain_lengths(self):
vectors = self.verts[self.constraints[:,1]] - self.verts[self.constraints[:,0]]
lengths = sqrt(sum(square(vectors), axis=1))
correction = 0.5 * (vectors.T * (1 - (self.restlengths/lengths))).T
self.verts[self.constraints[:,0]] += correction
self.verts[self.constraints[:,1]] -= correction
def compute_normals(self):
facenormals = cross(self.verts[self.faces[:,1]]-self.verts[self.faces[:,0]], self.verts[self.faces[:,2]]-self.verts[self.faces[:,0]])
self.normals.fill(0)
self.normals[self.faces[:,0]] += facenormals
self.normals[self.faces[:,1]] += facenormals
self.normals[self.faces[:,2]] += facenormals
lengths = sqrt(sum(square(self.normals), axis=1))
self.normals = (self.normals.T/lengths).T
he estado consiguiendo unos resultados muy con errores como resultado de duplicados ser ignorado en mis operaciones de asignación indexados.