You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用循环实现4x4矩阵与16x1向量的分段元素乘法?

Alright, let's tackle this problem clearly. You have a 4x4 matrix and a 16-element column vector, and you need to multiply each row of the matrix with a consecutive 4-element chunk of the vector (element-wise), then stack all those results into a 16-element output vector. Let's walk through how to implement this with loops in a couple of common languages:

Python Implementation

First, let's set up sample inputs to test our code:

import numpy as np

# Define our 4x4 matrix
matrix = np.array([
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12],
    [13, 14, 15, 16]
])

# Define our 16x1 column vector
vector = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]).reshape(-1, 1)

Now the loop logic to perform the required operation:

# Initialize an empty 16x1 output vector
output = np.zeros((16, 1))

# Loop through each row of the matrix
for row_idx in range(matrix.shape[0]):
    # Extract the 4-element chunk from the vector that matches this row
    start_idx = row_idx * 4
    end_idx = (row_idx + 1) * 4
    vector_chunk = vector[start_idx:end_idx]
    
    # Reshape the matrix row to a column vector, then do element-wise multiplication
    output[start_idx:end_idx] = matrix[row_idx].reshape(-1, 1) * vector_chunk

How this works:

  • We start by creating an empty output vector of the correct size to store our results.
  • For each row in the matrix, we calculate the start and end indices to slice the corresponding 4-element chunk from the input vector.
  • We reshape the matrix row into a column vector to match the chunk's shape, then use element-wise multiplication (* in NumPy) to multiply each element of the row with the corresponding element in the chunk.
  • Finally, we assign the resulting 4-element column to the correct position in the output vector.

MATLAB Implementation

If you're working in MATLAB, here's how to do the same thing:
First, define your sample inputs:

% 4x4 matrix
matrix = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16];

% 16x1 column vector
vector = [1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16];

Then the loop code:

% Initialize empty output vector
output = zeros(16, 1);

% Loop through each row of the matrix
for row_idx = 1:size(matrix, 1)
    % Calculate indices for the vector chunk (MATLAB uses 1-based indexing)
    start_idx = (row_idx - 1)*4 + 1;
    end_idx = row_idx*4;
    vector_chunk = vector(start_idx:end_idx);
    
    % Transpose the matrix row to a column, then do element-wise multiplication
    output(start_idx:end_idx) = matrix(row_idx, :)' .* vector_chunk;
end

Key notes for MATLAB:

  • MATLAB uses 1-based indexing, so we adjust our start index calculation to (row_idx - 1)*4 + 1 to get the correct starting position in the vector.
  • The ' operator transposes the matrix row from a 1x4 row vector to a 4x1 column vector, matching the chunk's shape.
  • We use .* for element-wise multiplication (this is crucial—using just * would do matrix multiplication instead).

General Idea for Other Languages

No matter which language you're using, the core logic remains the same:

  • Iterate over each row of your matrix.
  • For each row, extract the consecutive 4-element segment from your vector that corresponds to that row (row 1 uses elements 1-4, row 2 uses 5-8, etc.).
  • Perform element-wise multiplication between the row and the segment.
  • Assign the result to the corresponding position in your 16-element output vector.

内容的提问来源于stack exchange,提问作者Gze

火山引擎 最新活动