我的数组上的浮点数有问题。在
import numpy
from StringIO import StringIO
matrizgeometrica = numpy.loadtxt('geometrica.txt') # crea la matriz geometrica a partir del txt
matrizvelocidades = numpy.loadtxt('velocidades.txt') # crea la matriz de velocidades a partir del txt
#Se genera la matriz de tiempos unitarios a partir de la matriz geometrica y la matriz de velocidades
matriztiempo=matrizgeometrica
for x in matriztiempo:
for y in matriztiempo:
if matriztiempo[x,y]!=0 and matrizvelocidades[x,y]!=0:
matriztiempo[x,y]=matriztiempo[x,y]/matrizvelocidades[x,y]
else:
matriztiempo[x,y]=0
错误是:
^{pr2}$我不知道问题出在哪里,但我不能把值改成整数,我需要浮点。在
这是你的循环:
这将把
x
设置为数组中的值。这不会找到值的位置;它只获取值。在{你想知道的最好的方式是使用位置:
^{pr2}$现在
x
像以前一样获取值,但是i
也获得列表中该值的索引。在我认为在你的例子中,写循环最简单的方法是:
通常在Python中,当我们处理两个列表时,我们可能希望使用}来获取值,但是在这种情况下,您使用两个索引值重写了一个数组,我认为以上述方式编写它可能是最好的。当然,这是最简单的。在
zip()
或{注意,我们不需要测试
matriztiempo[x,y]
是否等于零;如果是,那么对于任何有效的除数,结果都是零。我们需要检查除数是否有效,以避免被零除异常。(如果try:
/except
中不太可能的值,我们也可以放一个try:
/except
块来捕捉这种情况。如果它是一个可能的值,这是一个很好的方法。在编辑:但既然这是纽比,有一个更好的方法来做,快得多。如果我们不需要担心除数中的零,我们可以这样做:
因为我们确实需要担心零,所以我们可以制作一个“面具”来解决这个问题。在
这应该比使用
for
循环的解决方案快得多。在您还可以将
bad_mask
设置为:但是通过显式计算}的正确逻辑逆。如果有人编辑了创建
numpy.logical_not()
,我们确保bad_mask
始终是{good_mask
的行,numpy.logical_not()
将找到正确的反向表达式,但是如果我们有第二个引用matrizvelocidades
的表达式,那么编辑其中一个而不编辑另一个将导致错误。在相关问题 更多 >
编程相关推荐