用嵌套的for循环将正方形数组和行数组相乘



我正试图将方形数组和行数组与嵌套的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)

我认为这段代码有两个问题。

  1. 在第二个for循环中,您使用len(x[0])。如声明x为1D数组,则x[0]为整数,在整数上计算长度会抛出类型错误。

    print(len(2)) #TypeError: int类型的对象没有len()

  2. 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)

相关内容

最新更新