我用python3编写了一个程序来找出2n*n
矩阵的乘积(其中n
是2的幂次)。在
为什么下面的代码不起作用并显示IndexError: invalid index to scalar variable
?在
import numpy as np
def product(x, y, k):
def fsum(p, q, m):
r = [[p[i, j] + q[i, j] for j in range(m)] for i in range(m)]
return r
if k == 1:
return x[0][0] * y[0][0]
else:
A = x[0:(k // 2), 0:(k // 2)]
B = x[0:(k // 2), (k // 2):k]
C = x[(k // 2):k, 0:(k // 2)]
D = x[(k // 2):k, (k // 2):k]
E = y[0:(k // 2), 0:(k // 2)]
F = y[0:(k // 2), (k // 2):k]
G = y[(k // 2):k, 0:(k // 2)]
H = y[(k // 2):k, (k // 2):k]
C00 = fsum(product(A, E, k // 2), product(B, G, k // 2), k // 2)
C01 = fsum(product(A, F, k // 2), product(B, H, k // 2), k // 2)
C10 = fsum(product(C, E, k // 2), product(D, G, k // 2), k // 2)
C11 = fsum(product(C, F, k // 2), product(D, H, k // 2), k // 2)
return np.array([[C00, C01], [C10, C11]])
n = int(input('Enter index(power of 2): '))
print('Input 1st matrix')
a = np.array([[int(_) for _ in input().split()] for x in range(n)])
print('Input 2nd matrix')
b = np.array([[int(_) for _ in input().split()] for x in range(n)])
print(product(a, b, n))
运行示例:
将
^{pr2}$print('p,q', p, q, type(p), type(q))
添加到fsum
中所以
p
是一个np.int64
对象,而不是数组。它已经被索引了,不能再进一步了。在另一个诊断指纹
显示器
所以当
k
为2时,product
返回一个scalar variable
,一个int64
对象,而不是数组。将其传递给fsum
会产生错误。在正是}?)是
product
的这个分支导致了问题-x[0][0]
(为什么不{x
的元素:此时
x
是(1,1)形状,所以您可以只写有了这个变化,我得到了:
除了尺寸匹配:
您的形状是
(2, 2, 1, 1)
,可以用squeeze
删除它,但是您确实应该优化迭代,以便在没有它的情况下获得正确的形状。在{4x4>数组现在也得到了形状。在
以下是一种方法:
不用说它非常慢
^{pr2}$相关问题 更多 >
编程相关推荐