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是一个字符串,a
和b
是一个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)):
...
并确保 a
和 b
的长度在您要求用户输入时始终相同,或者专门检查并引发错误
在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)
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是一个字符串,a
和b
是一个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)):
...
并确保 a
和 b
的长度在您要求用户输入时始终相同,或者专门检查并引发错误
在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)