python 遍历数组矩阵
python iterate over arrays matrices
我正在尝试创建一个新矩阵(数组)
a = [1, 2, 3]
b = [0, 1, 2]
哪里
C = [[1*0, 1*1, 1*2], [2*0, 2*1, 2*2], [3*0, 3*1, 3*2]]
我一直在搜索 numpy 中的文档,但找不到满足此要求的函数。
for i in a:
c = np.multiply(a, b)
for j in b:
c = np.multiply(a, b)
您正在寻找 numpy.matmul
。您需要使向量具有两个维度(其中一个维度的大小为一)。例如:
np.matmul(np.array([[1],[2],[3]]), np.array([[2,3,4]]))
考虑您的输入和输出。您需要两个数组相乘得到一个 3x3 数组。当您的输入数组的形状为 3xn 和 nx3 时,可能会发生这种情况,其中 n 是任何整数。具体来说,对于您的情况,您有 3x1 和 1x3 数组。
因此只需将数组转换为正确的形状,然后将它们相乘即可。请注意,@
表示矩阵乘法。
import numpy as np
a = np.array([1, 2, 3])
b = np.array([0, 1, 2])
c = a.reshape(3, 1) @ b.reshape(1, 3)
print(c)
有几种方法。这通常称为 outer product
:
In [46]: a=np.array([1,2,3]); b=np.array([0,1,2])
In [47]: np.outer(a,b)
Out[47]:
array([[0, 1, 2],
[0, 2, 4],
[0, 3, 6]])
带广播的逐元素乘法也很有效:
In [48]: a[:,None]*b
Out[48]:
array([[0, 1, 2],
[0, 2, 4],
[0, 3, 6]])
这会将 (N,1) 数组与 (M) 相乘得到 (N,M)。但是你需要阅读 broadcasting
.
它也可以作为矩阵乘法来完成,通过制作 (N,1) 和 (1,M) 数组(在大小为 1 的维度上求和)。阅读 np.matmul
文档了解详情。
In [49]: a[:,None]@b[None,:]
Out[49]:
array([[0, 1, 2],
[0, 2, 4],
[0, 3, 6]])
对于列表,纯迭代的解决方案是:
In [50]: [[i*j for j in b] for i in a]
Out[50]: [[0, 1, 2], [0, 2, 4], [0, 3, 6]]
我正在尝试创建一个新矩阵(数组)
a = [1, 2, 3]
b = [0, 1, 2]
哪里
C = [[1*0, 1*1, 1*2], [2*0, 2*1, 2*2], [3*0, 3*1, 3*2]]
我一直在搜索 numpy 中的文档,但找不到满足此要求的函数。
for i in a:
c = np.multiply(a, b)
for j in b:
c = np.multiply(a, b)
您正在寻找 numpy.matmul
。您需要使向量具有两个维度(其中一个维度的大小为一)。例如:
np.matmul(np.array([[1],[2],[3]]), np.array([[2,3,4]]))
考虑您的输入和输出。您需要两个数组相乘得到一个 3x3 数组。当您的输入数组的形状为 3xn 和 nx3 时,可能会发生这种情况,其中 n 是任何整数。具体来说,对于您的情况,您有 3x1 和 1x3 数组。
因此只需将数组转换为正确的形状,然后将它们相乘即可。请注意,@
表示矩阵乘法。
import numpy as np
a = np.array([1, 2, 3])
b = np.array([0, 1, 2])
c = a.reshape(3, 1) @ b.reshape(1, 3)
print(c)
有几种方法。这通常称为 outer product
:
In [46]: a=np.array([1,2,3]); b=np.array([0,1,2])
In [47]: np.outer(a,b)
Out[47]:
array([[0, 1, 2],
[0, 2, 4],
[0, 3, 6]])
带广播的逐元素乘法也很有效:
In [48]: a[:,None]*b
Out[48]:
array([[0, 1, 2],
[0, 2, 4],
[0, 3, 6]])
这会将 (N,1) 数组与 (M) 相乘得到 (N,M)。但是你需要阅读 broadcasting
.
它也可以作为矩阵乘法来完成,通过制作 (N,1) 和 (1,M) 数组(在大小为 1 的维度上求和)。阅读 np.matmul
文档了解详情。
In [49]: a[:,None]@b[None,:]
Out[49]:
array([[0, 1, 2],
[0, 2, 4],
[0, 3, 6]])
对于列表,纯迭代的解决方案是:
In [50]: [[i*j for j in b] for i in a]
Out[50]: [[0, 1, 2], [0, 2, 4], [0, 3, 6]]