ait toplu işlem sürüm yapmak bir toplu işlem sürümNumpy: Dördey çarpma
def quat_multiply(self, quaternion0, quaternion1):
x0, y0, z0, w0 = np.split(quaternion0, 4, 1)
x1, y1, z1, w1 = np.split(quaternion1, 4, 1)
result = np.array((
x1*w0 + y1*z0 - z1*y0 + w1*x0,
-x1*z0 + y1*w0 + z1*x0 + w1*y0,
x1*y0 - y1*x0 + z1*w0 + w1*z0,
-x1*x0 - y1*y0 - z1*z0 + w1*w0), dtype=np.float64)
return np.transpose(np.squeeze(result))
Bu fonksiyon şekli ile quaternion1 ve quaternion0 kolları için aşağıdaki fonksiyonu
def quaternion_multiply(quaternion0, quaternion1):
"""Return multiplication of two quaternions.
>>> q = quaternion_multiply([1, -2, 3, 4], [-5, 6, 7, 8])
>>> numpy.allclose(q, [-44, -14, 48, 28])
True
"""
x0, y0, z0, w0 = quaternion0
x1, y1, z1, w1 = quaternion1
return numpy.array((
x1*w0 + y1*z0 - z1*y0 + w1*x0,
-x1*z0 + y1*w0 + z1*x0 + w1*y0,
x1*y0 - y1*x0 + z1*w0 + w1*z0,
-x1*x0 - y1*y0 - z1*z0 + w1*w0), dtype=numpy.float64)
dönüştürülmüş (4?). Şimdi, fonksiyonun (?,?, 4) gibi rastgele sayıları ele alabilmesini istiyorum. Bu nasıl yapılır?
Kendini kurtarabilecek Bir kopyayı, son boyutu ön tarafa getirmek için 'np.rollaxis' kullanmak yerine diziyi transpoze ederek. –
@ali_m 'np.rollaxis' de görünüm oluşturmuyor mu? – Divakar
Üzgünüm, haklısın (muhtemelen 'np.roll' ile karıştırıyordum). Transpose yine de biraz daha hızlı. –