【问题标题】:"only integer scalar arrays can be converted to a scalar index"“只有整数标量数组可以转换为标量索引”
【发布时间】:2020-11-28 15:15:02
【问题描述】:

我正在生成一个 numpy 数组,其中包含 100000 个介于 1 和 6 之间的随机数,我想计算前 10、100、1000 的平均值……我还想在对数刻度上绘制平均值。除了 Python 和 numpy 和 matplotlib,我不能使用任何东西。为什么我会收到此错误?我做错了什么?

这是我的代码:

throws=numpy.random.randint(1,7,(1000000))
print(throws[1:10])

x=np.logspace(1,6,6)
plt.plot(x, int(mean(throws[1:x])))
plt.semilogx()

对不起,我的英语和德语变量名不好......

【问题讨论】:

  • 您遇到了哪个错误?
  • 我会避免在变量名中使用变音符号。可能会给解释器带来麻烦。
  • 显然解释器在抱怨你使用了不能用作索引的东西作为索引。我猜这来自wurfe[1:x]x=np.logspace(1,6,6)
  • 我收到 TypeError:只有整数标量数组可以转换为标量索引

标签: python numpy numpy-slicing


【解决方案1】:

你快到了!您只需对würfe(掷骰子)数组进行切片,然后对其应用均值,这是最简单的

würfe=numpy.random.randint(1,7,(1000000))
print(würfe[1:10])

x=np.logspace(1,6,6)
y=[np.mean(würfe[:int(x_)]) for x_ in x]  # <--- just add this line
plt.plot(x, y)
plt.semilogx()
plt.show()

x 这里是 [10, 100, 1000, 10000, 100000, 1000000]würfe[:int(x_)]x 从 float 转换为 int 并使用它将原始数组分割成您想要取平均值的部分。然后用Python list comprehension 取平均值。

【讨论】:

  • 非常感谢,你让我开心
【解决方案2】:

试运行:

import numpy
x=numpy.logspace(1,6,6)
print(x.dtype)

表演

float64

所以würfe[1:x] 使用float64 数组作为索引,肯定是不对的。

使用

x=numpy.logspace(1,6,6).astype(int)

还有würfe[1:x] 要求 x 是一个 int 而不是一个数组。

【讨论】:

  • 感谢您的帮助,但这并没有改变任何东西...您还有其他建议/想法导致问题的原因吗?
  • 问题出现在würfe[1:x],因为 x 是数组而不是数字(标量)。尝试单独使用 x 的每个成员:[würfe[:x_] for x_ in x]
猜你喜欢
  • 1970-01-01
  • 2021-07-15
  • 2018-05-29
  • 2021-01-27
  • 2019-04-26
  • 2017-12-15
  • 2021-10-31
  • 1970-01-01
  • 2018-04-04
相关资源
最近更新 更多