Hướng dẫn scalar multiplication of vectors python - nhân vô hướng của vectơ python

Xem thảo luận

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    Đọc

    • Bàn luận
    • Nhân vector nhân có ba loại:
    • Sản phẩm vô hướng
    • Sản phẩm chấm
      Scalar multiplication can be represented by multiplying a scalar quantity by all the elements in the vector matrix.

      Hướng dẫn scalar multiplication of vectors python - nhân vô hướng của vectơ python

      Sản phẩm chéo

      Nhân hóa vô hướng: Nhân vô hướng có thể được biểu diễn bằng cách nhân một lượng vô hướng với tất cả các phần tử trong ma trận vectơ.

      Mã: Mã Python giải thích phép nhân vô hướng

      4
      0
      4
      1

      4
      0
      4
      3

      4
      0
      4
      5

      [ 12  76 -61]
      8
      [ 12  76 -61]
      9
      >>> a = np.array([[ 5, 1 ,3], 
                        [ 1, 1 ,1], 
                        [ 1, 2 ,1]])
      >>> b = np.array([1, 2, 3])
      >>> print a.dot(b)
      array([16, 6, 8])
      
      0
      >>> a = np.array([[ 5, 1 ,3], 
                        [ 1, 1 ,1], 
                        [ 1, 2 ,1]])
      >>> b = np.array([1, 2, 3])
      >>> print a.dot(b)
      array([16, 6, 8])
      
      1

      >>> a = np.array([[ 5, 1 ,3], 
                        [ 1, 1 ,1], 
                        [ 1, 2 ,1]])
      >>> b = np.array([1, 2, 3])
      >>> print a.dot(b)
      array([16, 6, 8])
      
      2
      4
      7
      >>> a = np.array([[ 5, 1 ,3], 
                        [ 1, 1 ,1], 
                        [ 1, 2 ,1]])
      >>> b = np.array([1, 2, 3])
      >>> print a.dot(b)
      array([16, 6, 8])
      
      4
      >>> a = np.array([[ 5, 1 ,3], 
                        [ 1, 1 ,1], 
                        [ 1, 2 ,1]])
      >>> b = np.array([1, 2, 3])
      >>> print a.dot(b)
      array([16, 6, 8])
      
      5
      >>> a = np.array([[ 5, 1 ,3], 
                        [ 1, 1 ,1], 
                        [ 1, 2 ,1]])
      >>> b = np.array([1, 2, 3])
      >>> print a.dot(b)
      array([16, 6, 8])
      
      6
      >>> a = np.array([[ 5, 1 ,3], 
                        [ 1, 1 ,1], 
                        [ 1, 2 ,1]])
      >>> b = np.array([1, 2, 3])
      >>> print a.dot(b)
      array([16, 6, 8])
      
      5
      >>> a = np.array([[ 5, 1 ,3], 
                        [ 1, 1 ,1], 
                        [ 1, 2 ,1]])
      >>> b = np.array([1, 2, 3])
      >>> print a.dot(b)
      array([16, 6, 8])
      
      8

      >>> a = np.array([[ 5, 1 ,3], 
                        [ 1, 1 ,1], 
                        [ 1, 2 ,1]])
      >>> b = np.array([1, 2, 3])
      >>> print a.dot(b)
      array([16, 6, 8])
      
      9

      >>> print(a @ b)
      array([16, 6, 8])
      
      0
      4
      7
      >>> print(a @ b)
      array([16, 6, 8])
      
      2
      >>> print(a @ b)
      array([16, 6, 8])
      
      3
      4
      7
      >>> print(a @ b)
      array([16, 6, 8])
      
      5
      >>> print(a @ b)
      array([16, 6, 8])
      
      6

      >>> print(a @ b)
      array([16, 6, 8])
      
      7
      >>> print(a @ b)
      array([16, 6, 8])
      
      8
      4
      7
      [ 12  76 -61]
      9
      >>> a = np.array([[ 5, 1 ,3], 
                        [ 1, 1 ,1], 
                        [ 1, 2 ,1]])
      >>> b = np.array([1, 2, 3])
      >>> print a.dot(b)
      array([16, 6, 8])
      
      5
      [ 12  76 -61]
      0
      >>> a = np.array([[ 5, 1 ,3], 
                        [ 1, 1 ,1], 
                        [ 1, 2 ,1]])
      >>> b = np.array([1, 2, 3])
      >>> print a.dot(b)
      array([16, 6, 8])
      
      5
      >>> np.einsum('ji,i->j', a, b)
      array([16, 6, 8])
      
      4

      4
      6
      4
      7
      4
      8
      4
      9
      [ 12  76 -61]
      0
      [ 12  76 -61]
      1
      [ 12  76 -61]
      2

      >>> np.matmul(a, b)
      array([16, 6, 8])
      
      3

      [ 12  76 -61]
      3
      4
      7
      [ 12  76 -61]
      5
      [ 12  76 -61]
      6
      [ 12  76 -61]
      7

      w =  [20  5]

      Hướng dẫn scalar multiplication of vectors python - nhân vô hướng của vectơ python

      >>> np.einsum('ji,i->j', a, b)
      array([16, 6, 8])
      
      5
      [ 12  76 -61]
      6
      >>> np.einsum('ji,i->j', a, b)
      array([16, 6, 8])
      
      7
      [ 12  76 -61]
      6
      >>> np.einsum('ji,i->j', a, b)
      array([16, 6, 8])
      
      9
      4
      7
      >>> np.matmul(a, b)
      array([16, 6, 8])
      
      1
      >>> np.matmul(a, b)
      array([16, 6, 8])
      
      2

      Hướng dẫn scalar multiplication of vectors python - nhân vô hướng của vectơ python

      Đầu ra:

      Nhân hóa vô hướng: Nhân vô hướng có thể được biểu diễn bằng cách nhân một lượng vô hướng với tất cả các phần tử trong ma trận vectơ.

      4
      0
      4
      1

      4
      0
      4
      3

      4
      0
      4
      5

      4
      6
      4
      7
      4
      8
      4
      9
      [ 12  76 -61]
      0
      [ 12  76 -61]
      1
      [ 12  76 -61]
      2

      [ 12  76 -61]
      8
        >>> np.dot(np.dot(a, a.T), a).dot(a.T)
        array([[1406,  382,  446],
               [ 382,  106,  126],
               [ 446,  126,  152]])
        >>> np.linalg.multi_dot((a, a.T, a, a.T))
        array([[1406,  382,  446],
               [ 382,  106,  126],
               [ 446,  126,  152]])
      
      7

      [ 12  76 -61]
      3
      4
      7
      [ 12  76 -61]
      5
      [ 12  76 -61]
      6
      [ 12  76 -61]
      7

      >>> np.einsum('ji,i->j', a, b)
      array([16, 6, 8])
      
      5
      [ 12  76 -61]
      6
      >>> np.einsum('ji,i->j', a, b)
      array([16, 6, 8])
      
      7
      [ 12  76 -61]
      6
      >>> np.einsum('ji,i->j', a, b)
      array([16, 6, 8])
      
      9
      4
      7
      >>> np.matmul(a, b)
      array([16, 6, 8])
      
      1
      >>> np.matmul(a, b)
      array([16, 6, 8])
      
      2

      [ 12  76 -61]
      3
      4
      7
      [ 12  76 -61]
      5
      [ 12  76 -61]
      6
      [ 12  76 -61]
      7

      4

      >>> np.einsum('ji,i->j', a, b)
      array([16, 6, 8])
      
      5
      [ 12  76 -61]
      6
      >>> np.einsum('ji,i->j', a, b)
      array([16, 6, 8])
      
      7
      [ 12  76 -61]
      6
      >>> np.einsum('ji,i->j', a, b)
      array([16, 6, 8])
      
      9
      4
      7
      >>> np.matmul(a, b)
      array([16, 6, 8])
      
      1
      >>> np.matmul(a, b)
      array([16, 6, 8])
      
      2

      Hướng dẫn scalar multiplication of vectors python - nhân vô hướng của vectơ python

      Đầu ra:

      Nhân hóa vô hướng: Nhân vô hướng có thể được biểu diễn bằng cách nhân một lượng vô hướng với tất cả các phần tử trong ma trận vectơ.

      4
      0
      4
      1

      4
      0
      4
      3

      4
      0
      4
      5

      4
      6
      4
      7
      4
      8
      4
      9
      [ 12  76 -61]
      0
      [ 12  76 -61]
      1
      [ 12  76 -61]
      2

      [ 12  76 -61]
      8
      4
      14

      Output:

      [ 12  76 -61]

    Giải pháp đơn giản nhất

    Sử dụng

    4
    15 hoặc
    4
    16. Xem tài liệu ở đây.

    >>> a = np.array([[ 5, 1 ,3], 
                      [ 1, 1 ,1], 
                      [ 1, 2 ,1]])
    >>> b = np.array([1, 2, 3])
    >>> print a.dot(b)
    array([16, 6, 8])
    

    Điều này xảy ra bởi vì các mảng numpy không phải là ma trận và các hoạt động tiêu chuẩn

    4
    17 phần tử công việc khôn ngoan trên các mảng.

    Lưu ý rằng trong khi bạn có thể sử dụng

    4
    18 (tính đến đầu năm 2021) trong đó
    [ 12  76 -61]
    6 sẽ được xử lý như phép nhân ma trận tiêu chuẩn,
    4
    18 không được chấp nhận và có thể bị xóa trong các bản phát hành trong tương lai .. Xem ghi chú trong tài liệu của nó (được sao chép dưới đây):
    4
    18 is deprecated and may be removed in future releases.
    . See the note in its documentation (reproduced below):

    Nó không còn được khuyến nghị sử dụng lớp này, ngay cả đối với đại số tuyến tính. Thay vào đó sử dụng các mảng thông thường. Lớp học có thể được loại bỏ trong tương lai.

    Cảm ơn @hopeking.


    Các giải pháp khác

    Cũng biết có những lựa chọn khác:

    • Như đã lưu ý dưới đây, nếu sử dụng Python3.5+ và Numpy V1.10+, toán tử

      4
      21 hoạt động như bạn mong đợi:

      >>> print(a @ b)
      array([16, 6, 8])
      
    • Nếu bạn muốn Overkill, bạn có thể sử dụng

      4
      22. Tài liệu sẽ cung cấp cho bạn một hương vị cho cách nó hoạt động, nhưng thành thật mà nói, tôi không hoàn toàn hiểu cách sử dụng nó cho đến khi đọc câu trả lời này và chỉ chơi xung quanh với nó.

      >>> np.einsum('ji,i->j', a, b)
      array([16, 6, 8])
      
    • Tính đến giữa năm 2016 (Numpy 1.10.1), bạn có thể thử thử nghiệm

      4
      23, hoạt động như
      4
      15 với hai trường hợp ngoại lệ chính: không nhân hóa vô hướng nhưng nó hoạt động với các ngăn xếp ma trận.

      >>> np.matmul(a, b)
      array([16, 6, 8])
      
    • 4
      25 có chức năng tương tự như
      4
      15 cho phép nhân vectơ ma trận nhưng hoạt động khác nhau đối với ma trận ma trận và phép nhân tenxơ (xem Wikipedia liên quan đến sự khác biệt giữa sản phẩm bên trong và sản phẩm DOT nói chung hoặc xem câu trả lời này về việc triển khai Numpy).for matrix-vector multiplication but behaves differently for matrix-matrix and tensor multiplication (see Wikipedia regarding the differences between the inner product and dot product in general or see this SO answer regarding numpy's implementations).

      >>> np.inner(a, b)
      array([16, 6, 8])
      
      # Beware using for matrix-matrix multiplication though!
      >>> b = a.T
      >>> np.dot(a, b)
      array([[35,  9, 10],
             [ 9,  3,  4],
             [10,  4,  6]])
      >>> np.inner(a, b) 
      array([[29, 12, 19],
             [ 7,  4,  5],
             [ 8,  5,  6]])
      
    • Nếu bạn có nhiều mảng 2D đến

      4
      27 cùng nhau, bạn có thể xem xét hàm
      4
      28, giúp đơn giản hóa cú pháp của nhiều
      4
      29 lồng nhau. Lưu ý rằng điều này chỉ hoạt động với các mảng 2D (nghĩa là không cho phép nhân vector ma trận).2D arrays to
      4
      27 together, you may consider the
      4
      28 function, which simplifies the syntax of many nested
      4
      29s. Note that this only works with 2D arrays (i.e. not for matrix-vector multiplication).

        >>> np.dot(np.dot(a, a.T), a).dot(a.T)
        array([[1406,  382,  446],
               [ 382,  106,  126],
               [ 446,  126,  152]])
        >>> np.linalg.multi_dot((a, a.T, a, a.T))
        array([[1406,  382,  446],
               [ 382,  106,  126],
               [ 446,  126,  152]])
      

    Tùy chọn hiếm hơn cho các trường hợp cạnh

    • Nếu bạn có tenxơ (mảng có kích thước lớn hơn hoặc bằng một), bạn có thể sử dụng

      4
      30 với đối số tùy chọn
      4
      31:

      >>> np.tensordot(a, b, axes=1)
      array([16,  6,  8])
      
    • Không sử dụng

      4
      32 Nếu bạn có một ma trận các số phức, vì ma trận sẽ được làm phẳng thành một mảng 1D, thì nó sẽ cố gắng tìm sản phẩm chấm liên hợp phức tạp giữa ma trận và vector được làm phẳng của bạn (sẽ thất bại do kích thước Không phù hợp
      4
      33 so với
      4
      34).
      if you have a matrix of complex numbers, as the matrix will be flattened to a 1D array, then it will try to find the complex conjugate dot product between your flattened matrix and vector (which will fail due to a size mismatch
      4
      33 vs
      4
      34).

    Bạn có thể nhân một vectơ với vô hướng trong Python không?

    Nhân hóa vô hướng: Nhân vô hướng có thể được biểu diễn bằng cách nhân một lượng vô hướng với tất cả các phần tử trong ma trận vectơ. Ở đây, sản phẩm DOT cũng có thể được nhận bằng toán tử '@'.Scalar multiplication can be represented by multiplying a scalar quantity by all the elements in the vector matrix. Here, dot product can also be received using the '@' operator.

    Làm thế nào để bạn nhân vectơ với vô hướng?

    Để nhân một vectơ với vô hướng, nhân mỗi thành phần với vô hướng.Nếu → u = ⟨u1, u2⟩ có cường độ | → u |và hướng d, sau đó n → u = n⟨u1, u2⟩ = ⟨nu1, nu2⟩ trong đó n là một số thực dương, độ lớn là | n → u |, và hướng của nó là d.multiply each component by the scalar. If →u=⟨u1,u2⟩ has a magnitude |→u| and direction d , then n→u=n⟨u1,u2⟩=⟨nu1,nu2⟩ where n is a positive real number, the magnitude is |n→u| , and its direction is d .

    Làm thế nào để bạn nhân một vector trong Python?

    Sản phẩm chấm của hai vectơ trong Python..
    Syntax:.
    Parameters:.
    vector_a: [Array_like] Nếu A phức tạp liên hợp phức tạp của nó được sử dụng để tính toán sản phẩm DOT ..
    vector_b: [Array_like] Nếu B phức tạp liên hợp phức tạp của nó được sử dụng để tính toán sản phẩm DOT ..

    Sự nhân vô hướng trong Python là gì?

    Để nhân mảng với vô hướng trong python, bạn có thể sử dụng phương thức np.multiply ().Nhập Numpy dưới dạng NP Array1 = NP.mảng ([1, 2, 3]) mảng2 = np.Mảng ([[1, 2], [3, 4]]) n = 5 np.np. multiply() method. import numpy as np array1 = np. array([1, 2, 3]) array2 = np. array([[1, 2], [3, 4]]) n = 5 np.