我正试图将方形数组和行数组与嵌套的for循环相乘,但我遇到了错误,如object of type numpy.int64' has no len().
我需要能够计算产品与两个嵌套的循环,但我不确定在哪里我可以改变我的代码来优化和修复我的错误。
def matvec_row_variant_scalar(A,x):
product_array = np.zeros((len(A),len(A)),dtype=int)
for i in range(len(A)):
for j in range(len(x[0])):
for k in range(len(x)):
product_array[i][j] += A[i][k] * x[k][j]
return product_array
# Test arrays
square_array = np.array([[1,2],[3,4]])
row_array = np.array([2,2])
matvec_row_variant_scalar(square_array,row_array)
我认为这段代码有两个问题。
-
在第二个for循环中,您使用
len(x[0])
。如声明x为1D数组,则x[0]为整数,在整数上计算长度会抛出类型错误。print(len(2)) #TypeError: int类型的对象没有len()
-
在
product_array[i][j] += A[i][k] * x[k][j]
上,你应该再次考虑x是1D!
这是你的固定代码。
import numpy as np
def matvec_row_variant_scalar(A,x):
product_array = np.zeros((len(A),len(A)),dtype=int)
for i in range(len(A)):
for j in range(len(A[i])):
for k in range(len(x)):
product_array[i][j] += A[i][k] * x[j]
return product_array
# Test arrays
square_array = np.array([[1,2],[3,4]])
row_array = np.array([2,2])
matvec_row_variant_scalar(square_array,row_array)
返回的结果是
array([[ 6, 6],
[14, 14]])
好了,我明白了。谢谢大家的帮助。下面的代码可供感兴趣的人参考:
import numpy as np
def matvec_row_variant_scalar(A,x):
product_array = np.zeros((len(A),len(A)),dtype=int)
for i in range(len(A)):
for j in range(len(A[i])):
product_array[i][j] += x[i] * A[i][j]
column_sum = product_array.sum(axis=0)
return column_sum
square_array = np.array([[1,2],[3,4]])
row_array = np.array([2,2])
matvec_row_variant_scalar(square_array,row_array)