【问题标题】:How to multiply a numpy array by a scalar如何将一个numpy数组乘以一个标量
【发布时间】:2013-07-17 17:57:03
【问题描述】:

我有一个 numpy 数组,我试图将它乘以一个标量,但它不断抛出错误:

TypeError: unsupported operand type(s) for *: 'numpy.ndarray' and 'int'

我的代码是:

Flux140 = ['0.958900', 'null', '0.534400']
n = Flux140*3

【问题讨论】:

  • Flux140 看起来更像是一个字符串列表,而不是一个 numpy 数组。元素是字符串,对于正确的 Python 语法,它们缺少元素之间的逗号。
  • 绝对不是字符串列表。如果它是一个字符串列表,* 将是列表重复。这看起来像 NumPy 对象数组的 printed 表示。
  • 你确定你使用的是 numpy 数组吗?看起来您提交了一个列表,而应该是一个 numpy 数组。您可以使用 type 参数来确定它是否真的是一个 numpy 数组

标签: python arrays numpy scalar


【解决方案1】:

这是一个字符串数组。你想要一个数字数组。在制作数组之前用float 或其他东西解析输入。 (如何处理这些 'null's 取决于您的应用程序。)

【讨论】:

    【解决方案2】:

    问题是你的数组的dtype 是一个字符串,而numpy 不知道你想如何将一个字符串乘以一个整数。如果它是一个列表,您将重复该列表 3 次,但一个数组反而会给您一个错误。

    尝试使用astype 方法将数组的dtype 从字符串转换为浮点数。在您的情况下,您的 'null' 值会出现问题,因此您必须首先将 'null' 转换为其他值:

    Flux140[Flux140 == 'null'] = '-1'
    

    然后你可以让类型浮动:

    Flux140 = Flux140.astype(float)
    

    如果你想让你的'null' 变成别的东西,你可以先改变它:

    Flux140[Flux140 == -1] = np.nan
    

    现在你可以乘法了:

    tripled = Flux140 * 3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2014-05-30
      • 2015-10-12
      相关资源
      最近更新 更多