【问题标题】:Python can't multiply sequence by non-int of type 'float'Python不能将序列乘以'float'类型的非整数
【发布时间】:2013-06-04 09:11:53
【问题描述】:

我正在尝试评估一个公式,npnumpy

Ds = pow(10,5)
D = np.linspace(0, pow(10,6), 100)
alpha=1.44
beta=0.44
A=alpha*(D/Ds)
L=1.65
buf2=L/4.343
buf=pow(-(alpha*[D/Ds]),beta)
value=exp(buf)

然后我将绘制这些数据,但我得到:

buf=pow(-(alpha*[D/Ds]),beta)
TypeError: can't multiply sequence by non-int of type 'float'

我该如何克服这个问题?

【问题讨论】:

  • 值得注意的是,您已经在上面正确计算了A=alpha*(D/Ds),所以……为什么不直接使用buf=pow(-A, beta)

标签: python numpy


【解决方案1】:

变化:

buf=pow(-(alpha*[D/Ds]),beta)

到:

buf=pow(-(alpha*(D/Ds)),beta)

这个:

[D/Ds]

为您提供一个包含一个元素的列表。

但是这个:

alpha * (D/Ds)

在与alpha 相乘之前计算除数。

你可以将一个列表乘以一个整数:

>>> [1] * 4
[1, 1, 1, 1]

但不是浮动:

[1] * 4.0
TypeError: can't multiply sequence by non-int of type 'float'

因为列表中不能包含部分元素。

括号可用于数学计算中的分组:

>>> (1 + 2) * 4
12

【讨论】:

  • 并明确表示:将D/Ds(定义列表)周围的方括号更改为括号。
  • 谢谢。有趣的是,现在我得到了'nan'作为返回。有什么想法吗?
  • @y33t 这可能是一个单独的问题。
  • @y33t:鉴于alphaDs 是正数,并且所有D 值都是正数,那么您将一堆负数提高到分数幂。解决方案取决于问题:您想要复数,还是您的算法有误?
  • @abarnert 是的,我打错了; buf=exp(-(alpha*(D/Ds)),beta) 但现在我得到 TypeError: bad operand type for unary -: 'tuple'
猜你喜欢
  • 2017-02-04
  • 2019-03-21
  • 2010-12-30
  • 2012-10-09
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多