迭代浮点值

时间:2016-05-08 18:57:30

标签: python numpy types

我有两个7X7阵列(名为权重和距离),其中元素是浮点值 这是我正在使用的代码:

 xmax = 7
 ymax = 7
 hist = []
 for x in range(xmax):
     for y in range(ymax):
         for i in range (weights[x,y]):
             hist = hist + [distances[x,y]]
 print hist

当我尝试在范围内迭代(权重[x,y])时,由于权重[x,y]中的浮点值,我得到一个错误。我已经尝试创建不同的frange函数来迭代浮点值,但似乎没有任何效果。在运行代码之前,我不知道权重[x,y]的值是什么,所以我无法真正在frange函数中进行明确的启动和停止。

感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

我相信你正在寻找这样的东西,但我可能错了。为了方便起见,我使用的是更小的数据集。

weights = [[1,2],[3,4]]
distance = [[9,8],[7,6]]
hist = []

for x in range(len(weights)):
    new_list = []
    for y in range(len(weights[x])):
        new_list.append(weights[x][y] + distance[x][y])
    hist.append(new_list)

print hist

这可能是一种更优雅的方式,但它应该有效。

答案 1 :(得分:0)

问题

范围只能接受整数。如果存在任何非整数类型,则需要转换int。这包括浮点数,字符串,非整数类型的任何内容。 Python不会进行隐式转换。

>>> range(4.)
TypeError: range() integer end argument expected, got float.
>>> import numpy as np
>>> range(np.float(5))
TypeError: range() integer end argument expected, got float.
>>> range(int(4.))
[0, 1, 2, 3]

对您的代码的应用

对于您的代码,请执行以下操作:

for x in range(xmax):
     for y in range(ymax):
         for i in range(int(weights[x,y])):
             hist = hist+[distances[x,y]]
 print hist

注意显式int调用以确保整数,而不是浮点数传递给range函数?

Numpy Arange

如果您需要使用非整数值,请查看numpy.arange

>>> np.arange(5.)
array([ 0.,  1.,  2.,  3.,  4.])
>>> np.arange(5.5)
array([ 0.,  1.,  2.,  3.,  4.,  5.])
>>> np.arange(0, 5.5, 0.5)
array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5,  5. ])

它允许您使用浮点数,自定义步骤以及您自己的启动和停止。它只返回一个numpy数组而不是list / iterator。