如何有效地将 Numpy 向量乘以数字数组?
How do you Efficiently Multiply a Numpy Vector by an Array of Numbers?
如果我有一组值:
numbers = np.array([1, 2, 4, 5])
和一个向量:
vector = np.array([1, 0, 1])
如何将向量乘以值数组得到以下结果:
vector_array = np.array([[1, 0, 1], [2, 0, 2], [4, 0, 4], [5, 0, 5]])
我尝试通过执行以下操作使用 matmul 来执行此操作:
vector_array = vector[..., None]@numbers
和:
vector_array = vector.T@numbers
我希望得到可以转置的列向量,但是我得到的是这个输出:
选项 1:
vector_array = vector[..., None]@numbers
ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 2 is different from 1)
选项 2:
vector_array = vector.T@numbers
ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 2 is different from 3)
如何强制 matmul 以预期的方式运行并将列向量乘以行向量得到一个矩阵?我应该使用其他功能吗?
vector_array = vector * numbers[:, None]
输出:
>>> vector_array
array([[1, 0, 1],
[2, 0, 2],
[4, 0, 4],
[5, 0, 5]])
要理解它,请看numbers[:, None]
:
>>> numbers
array([1, 2, 4, 5])
>>> numbers[:, None]
array([[1],
[2],
[4],
[5]])
所以基本上 vector * numbers[:, None]
将 vector
乘以 numbers
的每个元素。
一种与@richardec 给出的不同的可能性是使用 numpy.outer
:
numpy.outer(numbers, normal) = np.array([[1, 0, 1], [2, 0, 2], [4, 0, 4], [5, 0, 5]])
根据需要。但是,我不确定哪种方法更快。
如果我有一组值:
numbers = np.array([1, 2, 4, 5])
和一个向量:
vector = np.array([1, 0, 1])
如何将向量乘以值数组得到以下结果:
vector_array = np.array([[1, 0, 1], [2, 0, 2], [4, 0, 4], [5, 0, 5]])
我尝试通过执行以下操作使用 matmul 来执行此操作:
vector_array = vector[..., None]@numbers
和:
vector_array = vector.T@numbers
我希望得到可以转置的列向量,但是我得到的是这个输出:
选项 1:
vector_array = vector[..., None]@numbers
ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 2 is different from 1)
选项 2:
vector_array = vector.T@numbers
ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 2 is different from 3)
如何强制 matmul 以预期的方式运行并将列向量乘以行向量得到一个矩阵?我应该使用其他功能吗?
vector_array = vector * numbers[:, None]
输出:
>>> vector_array
array([[1, 0, 1],
[2, 0, 2],
[4, 0, 4],
[5, 0, 5]])
要理解它,请看numbers[:, None]
:
>>> numbers
array([1, 2, 4, 5])
>>> numbers[:, None]
array([[1],
[2],
[4],
[5]])
所以基本上 vector * numbers[:, None]
将 vector
乘以 numbers
的每个元素。
一种与@richardec 给出的不同的可能性是使用 numpy.outer
:
numpy.outer(numbers, normal) = np.array([[1, 0, 1], [2, 0, 2], [4, 0, 4], [5, 0, 5]])
根据需要。但是,我不确定哪种方法更快。