new = zero(rows_A,cols_B)
for i in range(rows_A):
for j in range(cols_B):
new[i][j] += np.sum(A[i] * B[:,j])
如果我在[[0, 0, 0], [0, 1, 0], [0, 2, 1]]
中使用这种形式的数组B
它给了我一个错误
TypeError: list indices must be integers, not tuple
但是,如果我使用相同的数组B
,而不是A
,那么它运作良好。
我得到这种类型的返回数组
[[0, 0, 0], [0, 1, 0], [0, 2, 1]]
所以我想把它转换成这种形式
[[0 0 0]
[0 1 0]
[0 2 1]]
答案 0 :(得分:2)
numpy.asarray
会这样做。
import numpy as np
B = np.asarray([[0, 0, 0], [0, 1, 0], [0, 2, 1]])
这会产生
array([[0, 0, 0],
[0, 1, 0],
[0, 2, 1]])
可以使用[:, j]
索引。
此外,您似乎正在尝试制作矩阵产品。您可以使用np.dot
只使用一行代码执行相同的操作:
new = np.dot(A, B)
答案 1 :(得分:1)
B
似乎是一个列表。您无法将其编入B[:,i]
- 将其作为__getitem__
无效地传递给(slice(None,None,None),i)
- 即元组。
您可以先将B
转换为numpy数组(B = np.array(B)
),然后再从那里开始......