phép nói rằng tôi có mảng:thế nào để làm phân tán/tập hợp các hoạt động trong NumPy
a = array((1,2,3,4,5))
indices = array((1,1,1,1))
và tôi thực hiện thao tác:
a[indices] += 1
kết quả là
array([1, 3, 3, 4, 5])
nói cách khác , các bản sao trong số indices
bị bỏ qua
nếu tôi muốn các bản sao không được bỏ qua, kết quả là:
array([1, 6, 3, 4, 5])
thế nào tôi sẽ đi về điều này?
ví dụ trên là hơi tầm thường, những gì sau là chính xác những gì tôi đang cố gắng để làm:
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
Ive đã nhận được một số kết quả rất buggy như một kết quả của bản sao bị bỏ qua trong các hoạt động chuyển nhượng được lập chỉ mục của tôi.