Python ';numpy.ndarray和#x27;对象没有属性';iteritems';

Python ';numpy.ndarray和#x27;对象没有属性';iteritems';,python,Python,我想得到784维原始数字数据的直方图。 这是我的密码: import sys,os from math import * import random from numpy import * import matplotlib.pyplot as plt import datasets waitForEnter=False def exampleDistance(x1, x2): dist = 0. for i,v1 in x1.iteritems(): v2 =

我想得到784维原始数字数据的直方图。 这是我的密码:

import sys,os
from math import *
import random
from numpy import *
import matplotlib.pyplot as plt
import datasets

waitForEnter=False
def exampleDistance(x1, x2):
    dist = 0.
    for i,v1 in x1.iteritems():
        v2 = 0.
        if x2.has_key(i): v2 = x2[i]
        dist += (v1 - v2) * (v1 - v2)
    for i,v2 in x2.iteritems():
        if not x1.has_key(i):
            dist += v2 * v2
    return sqrt(dist)

def computeDistances(data):
    #N = len(data)
    #D = len(data[0])
    N, D = data.shape
    dist = []
    for n in range(N):
        for m in range(n):
            dist.append( exampleDistance(data[n],data[m])  / sqrt(D))
    return dist
Dims = [784]
#Cols = ['#FF0000', '#880000', '#000000', '#000088', '#0000FF']
Cols = ['#FF0000']
Bins = arange(0, 1, 0.02)


plt.xlabel('distance / sqrt(dimensionality)')
plt.ylabel('# of pairs of points at that distance')
#plt.title('dimensionality versus uniform point distances')
plt.title('dimensionality versus digits data point distances')

for i,d in enumerate(Dims):
    distances = computeDistances(datasets.DigitData.X)
    print "D=%d, average distance=%g" % (d, mean(distances) * sqrt(d))
    plt.hist(distances,
             Bins,
             histtype='step',
             color=Cols[i])
    if waitForEnter:
        plt.legend(['%d dims' % d for d in Dims])
        plt.show(False)
        x = raw_input('Press enter to continue...')


plt.legend(['%d dims' % d for d in Dims])
plt.savefig('fig.pdf')
plt.show()
但有点不对劲:

Traceback (most recent call last):
  File "HW3.py", line 56, in <module>
    distances = computeDistances(datasets.DigitData.X)
  File "HW3.py", line 39, in computeDistances
    dist.append( exampleDistance(data[n],data[m])  / sqrt(D))
  File "HW3.py", line 23, in exampleDistance
    for i,v1 in x1.iteritems():
AttributeError: 'numpy.ndarray' object has no attribute 'iteritems'

那我怎么修呢?作为一名python初学者,我对绘图非常困惑。

我建议您阅读本文,如果您仍然没有找到答案,请对此发表评论。我希望这会有帮助

谢谢你的回答。我知道iteritems()用于字典而不是数组。但是,函数def exampledance(x1,x2):是由教授给出的。她让我们使用这个函数来计算距离。我想我必须最小化exampleDistance(x1,x2)中的更改,但我不知道怎么做?您可以尝试在函数中使用
项更改
items
,将x1.items()中的I,v1更改为
?假设您有一个带键的字典,请尝试枚举(x1.iteritems(),1)中的I,v1:
。这应该能奏效。此处
1
将索引设置为从1开始。
class DigitData:
    Xall,Yall = loadDigitData('data/1vs2.all')
    N,D = Xall.shape
    N0 = int(float(N) * 0.5)
    X = Xall[0:N0,:]
    Y = Yall[0:N0]
    Xte = Xall[N0:,:]
    Yte = Yall[N0:]