【发布时间】:2017-01-11 19:48:06
【问题描述】:
下面的代码产生以下值错误。
ValueError: operands could not be broadcast together with shapes (8,8) (64,)
当我将“训练”数据集从 10 个图像扩展到 100 个图像时,它首先出现。解释器似乎告诉我,我不能对这些数据点执行任何坐标操作,因为其中一个坐标对是缺少一个值。我无法反驳这一点。不幸的是,我的工作并没有完全奏效。我试图插入一个 if 条件,后跟一个 continue 语句(即,如果出现这个特定的坐标,它应该从循环的顶部继续)。口译员不喜欢这个想法,并咕哝着说那句话的真实性并不像我想象的那么简单。它建议我尝试 a.any() 或 a.all()。我查看了两者的示例,并尝试将有问题的坐标对放在括号中并代替“a”。这两种方法都让我无处可去。我不知道有任何类似于我在 C 中用于排除不符合特定标准的输入的函数的 Python 函数。与类似问题有关的其他答案建议更改使用的数学,但有人告诉我这是我要进行的操作,因此我将其视为错误处理问题。
有人对如何处理这个问题有任何见解吗?任何想法将不胜感激!
代码如下:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
digits = datasets.load_digits()
#print the 0th image in the image database as an integer matrix
print(digits.images[0])
#plot the 0th image in the database assigning each pixel an intensity of black
plt.figure()
plt.imshow(digits.images[0], cmap = plt.cm.gray_r, interpolation = 'nearest')
plt.show()
#create training subsets of images and targets(labels)
X_train = digits.images[0:1000]
Y_train = digits.target[0:1000]
#pick a test point from images (345)
X_test = digits.images[345]
#view test data point
plt.figure()
plt.imshow(digits.images[345], cmap = plt.cm.gray_r, interpolation = 'nearest')
plt.show()
#distance
def dist(x, y):
return np.sqrt(np.sum((x - y)**2))
#expand set of test data
num = len(X_train)
no_errors = 0
distance = np.zeros(num)
for j in range(1697, 1797):
X_test = digits.data[j]
for i in range(num):
distance[i] = dist(X_train[i], X_test)
min_index = np.argmin(distance)
if Y_train[min_index] != digits.target[j]:
no_errors += 1
print(no_errors)
【问题讨论】:
标签: python numpy error-handling scikit-learn