Python 中的矩阵点积返回 "too many indices" 错误

Matrix dot product in Python returning "too many indices" error

import numpy as np

#initialize the vectors a and b

a = np.array(input('Enter the first vector: '))
b = np.array(input('Enter the second vector: '))

#Evaluate the dot product using numpy

a_dot_b = 0
for i in range(3):
    a_dot_b += a[i] * b[i]

if a_dot_b == 0:
    print("The vectors are orthogonal")
else:
    print("Dot product = ", a_dot_b)

我正在尝试编写一个程序来告诉用户两个向量是否正交。当我尝试 运行 这个时,它说 IndexError: too many indices for array 我不知道是我的循环有问题还是我输入向量有问题。

由于input()returns是一个字符串,ab是一个char数组。因此,您需要将输入字符串拆分为向量条目并将每个元素转换为浮点数。假设您将矢量元素输入为 1,2,3,您可以这样做:

import numpy as np

#initialize the vectors a and b

a = np.array([float(i) for i in input('Enter the first vector: ').split(",")])
b = np.array([float(i) for i in input('Enter the second vector: ').split(",")])

#Evaluate the dot product using numpy

a_dot_b = 0
for i in range(3):
    a_dot_b += a[i] * b[i]

if a_dot_b == 0:
    print("The vectors are orthogonal")
else:
    print("Dot product = ", a_dot_b)

请注意,您不需要循环来计算点积。您可以使用 np.dot(a,b).

这里可能有很多东西。你不能真正得到这样的数组:

a = np.array(input('Enter the first vector: '))

input returns 单个值。你需要一些类似的东西

a = []  
n = int(input("Enter the number of elements: ")) 
  
# iterating till the range 
for i in range(n): 
    a.append(float(input(f'Enter element #{i}:'))) 
a = np.array(a)

b

也一样

还有你的循环

for i in range(3):
...

假设两个数组中正好有三个元素。您可能想将其替换为

for i in range(len(a)):
...

并确保 ab 的长度在您要求用户输入时始终相同,或者专门检查并引发错误

在NumPy中,你应该使用[]确定数组的维数,这里你给NumPy一个零维的字符串并尝试迭代,所以你得到了错误。 您可以将代码更改为:

# get the first vector from user
firstVector = [int(i) for i in input('Enter the first vector: ').split()]
# convert into numpy array
a = np.array(firstVector)
# get the second vector from user
secondVector = [int(i) for i in input('Enter the second vector: ').split()]
# convert into numpy array
b = np.array(secondVector)

其余代码相同

代码第二部分的替代解决方案: 在NumPy中,你可以只用下面的代码求两个向量的点积:

1) sum(a * b)
2) np.dot(a,b)