2012-10-22 42 views
1
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]] 
+3

请出示什么'rows_A','cols_B',A''和'B'的。 –

回答

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) 
+0

我可以这样做,但我的教授。要我编码并优化代码。 thnks –

1

看来,B是一个列表。你不能将它索引为B[:,i] - 这是暗示地传递给__getitem__作为(slice(None,None,None),i)--即一个元组。

你可以转换B为numpy的阵列第一(B = np.array(B)),然后从那里......

+0

thnx,它的工作 –