Hướng dẫn n dimensional rotation matrix python - Python ma trận xoay n chiều

$ \ beingroup $

Tôi muốn tìm ma trận xoay $ n $ kích thước tương ứng với vòng quay của một góc $ \ theta $ xung quanh không gian con $ [N-2] $-.

Có công thức ma trận xoay N chiều. [Xem phương trình $ 15 $]

$$ i+[n_2n_1^t-n_1n_2^t] \ sin [a]+[n_1n_1^t+n_2n_2^t] [\ cos [a] -1] $$

Trong đó $ n_1 $ và $ n_2 $ là $ n $ -dimensional orthogonal vectơ.

Bất cứ ai có thể giải thích làm thế nào tôi có thể sử dụng công thức này, với giá $ n = 6 $?

hỏi ngày 14 tháng 2 năm 2017 lúc 15:23Feb 14, 2017 at 15:23

$ \ endgroup $

$ \ beingroup $

Đây là một ứng dụng ví dụ sử dụng Python / Numpy:

import numpy as np

# input vectors
v1 = np.array[ [1,1,1,1,1,1] ]
v2 = np.array[ [2,3,4,5,6,7] ]

# Gram-Schmidt orthogonalization
n1 = v1 / np.linalg.norm[v1]
v2 = v2 - np.dot[n1,v2] * n1
n2 = v2 / np.linalg.norm[v2]

# rotation by pi/2
a = np.pi/2

I = np.identity[6]

R = I + [ np.outer[n2,n1] - np.outer[n1,n2] ] * np.sin[a] + [ np.outer[n1,n1] + np.outer[n2,n2] ] * [np.cos[a]-1]

# check result
print[ np.matmul[ R, n1 ] ]
print[ n2 ]

Xem kết quả ở đây.

Đã trả lời ngày 12 tháng 3 năm 2018 lúc 2:27Mar 12, 2018 at 2:27

$ \ endgroup $

$ \ beingroup $

Đây là một ứng dụng ví dụ sử dụng Python / Numpy:

Xem kết quả ở đây.

Đã trả lời ngày 12 tháng 3 năm 2018 lúc 2:27Feb 14, 2017 at 15:32

Phụ thuộc vào những gì bạn có theo ý của bạn để tính toán?H. H. Rugh

Nếu bạn có ngôn ngữ lập trình khoa học, như MATLAB, bạn sẽ xây dựng một ma trận thứ nguyên $ n \ lần n $ từ công thức trên. Ví dụ: tôi chỉ là danh tính, $ n_2 n_1^t $ là một ma trận thứ nguyên $ n \ lần n $ thu được bằng cách lấy sản phẩm của một vectơ cột với một vectơ hàng, v.v. theo góc $ a $ trong mặt phẳng được kéo dài bởi $ [n_1, n_2] $ và với định hướng được đưa ra bởi cặp vợ chồng đó.1 gold badge20 silver badges45 bronze badges

$ \ endgroup $

//math.stackexchange.com/questions/442418/random-generation-of-rotation-matrices

Điều này có thể trả lời câu hỏi của bạn, ít nhất là theo như chiến lược. Theo như tôi biết, không có chức năng tiêu chuẩn hoặc thư viện nào từ Numpy sẽ làm chính xác những gì bạn cần. Vô số chiến lược tính toán được trình bày ở đó, nhưng tôi thích một phần mở rộng của phương pháp Đệ tứ vì nó có thể bảo tồn phân phối thống nhất, đó là những gì tôi cho là bạn đang theo đuổi.

EDIT: Câu trả lời ban đầu của tôi đã nêu "sự đồng nhất gần như", trong khi sau khi nghiên cứu thêm một chút, tôi thấy rằng phương pháp bậc bốn, khi được lấy mẫu từ phân phối đồng đều, trên thực tế sẽ bảo tồn phân phối đồng đều trong các vòng quay.

@mdhaber: Tôi nghĩ sẽ rất thuận tiện khi có chức năng trợ giúp ở đâu đó

def rotation[n, dims, angle]:
    """
    Parameters
    ------------
    n : int
        dimension of the space
    dims : 2-tuple of ints
        the vector indices which form the plane to perform the rotation in
    angle : array_like of shape [M...,]
        broadcasting angle to rotate by

    Returns
    --------
    m : array_like of shape [M..., n, n]
        [stack of] rotation matrix
    """
    i, j = dims
    assert i != j
    c = np.cos[angle]
    s = np.sin[angle]
    arr = np.eye[c.shape + [n, n], dtype=c.dtype]
    arr[..., i, i] = c
    arr[..., i, j] = -s
    arr[..., j, i] = s
    arr[..., j, j] = c
    return arr

và có thể một số tay ngắn được xây dựng cho các mục đích sử dụng phổ biến

rotation_2d = functools.partial[rotation, 2, [0, 1]]
rotation_3d = functools.partial[rotation, 3]
rotation_3d_x = functools.partial[rotation_3d, [1, 2]]  # yz-plane
rotation_3d_y = functools.partial[rotation_3d, [2, 0]]  # zx-plane
rotation_3d_z = functools.partial[rotation_3d, [0, 1]]  # xy-plane

Không có những tốc ký này, chúng ta vẫn có thể phục hồi:

  • Xoay 2D, rotation[angle, 2, [0, 1]]
  • Xoay 3D:
    • về mặt phẳng xy [trục z], rotation[3, [0, 1], angle]
    • về mặt phẳng yz [trục x], rotation[3, [1, 2], angle]
    • về mặt phẳng zx [trục y], rotation[3, [2, 0], angle]
  • Vòng quay 4D:
    • về mặt phẳng xy, rotation[4, [0, 1], angle]
    • ...

Cảm giác này như nó sẽ phù hợp với scipy.spatial.transform ở đâu đó, mặc dù cách viết ở trên có lẽ là một chút kinh ngạc.

Làm thế nào để bạn xoay một ma trận trong Python?

Cho một ma trận, các phần tử xoay theo chiều kim đồng hồ trong đó ...
Di chuyển các yếu tố của hàng trên cùng ..
Di chuyển các yếu tố của cột cuối cùng ..
Di chuyển các yếu tố của hàng dưới cùng ..
Di chuyển các yếu tố của cột đầu tiên ..

Làm cách nào để xoay một ma trận trong Numpy?

Numpy: Rot90 [] Hàm hàm rot90 [] được sử dụng để xoay một mảng bằng 90 độ trong mặt phẳng được chỉ định bởi các trục.Hướng xoay là từ đầu thứ nhất về phía trục thứ hai.Mảng gồm hai hoặc nhiều kích thước.Số lần mảng được xoay 90 độ.rot90[] function The rot90[] function is used to rotate an array by 90 degrees in the plane specified by axes. Rotation direction is from the first towards the second axis. Array of two or more dimensions. Number of times the array is rotated by 90 degrees.

Ma trận xoay 2D là gì?

Ma trận xoay trong 2D Quá trình xoay một đối tượng đối với một góc trong mặt phẳng hai chiều là vòng quay 2D.Chúng tôi thực hiện vòng quay này với sự trợ giúp của ma trận xoay 2 x 2 có dạng tiêu chuẩn như được đưa ra dưới đây: m [θ] = ⎡⎢⎣cosθ - sinθsinθcosθ⎤⎥⎦ [c o s θ - s i n n n n n n n n n n n n n n n n n n n n n n n n n n n n nThe process of rotating an object with respect to an angle in a two-dimensional plane is 2D rotation. We accomplish this rotation with the help of a 2 x 2 rotation matrix that has the standard form as given below: M[θ] = ⎡⎢⎣cosθ−sinθsinθcosθ⎤⎥⎦ [ c o s θ − s i n θ s i n θ c o s θ ] .

Làm thế nào để bạn xoay một ma trận 45 độ?

Công thức của vòng quay này là: rm [x + y - 1] [n - x + y] = m [x] [y], trong đó rm có nghĩa là ma trận xoay, m ma trận ban đầu và n kích thước của ma trận ban đầu[đó là n x n].RM[x + y - 1][n - x + y] = M[x][y], where RM means rotated matrix, M the initial matrix, and n the dimension of the initial matrix [which is n x n].

Bài Viết Liên Quan

Chủ Đề