【发布时间】:2017-03-12 19:42:34
【问题描述】:
我正在为 Raspberry Pi 构建一个项目,该项目在特定时间窗口内随机打开和关闭继电器。为了管理时间段,我想使用一个每天生成的二维数组。因此,我的 Python 应用程序需要清空前一天的数组,并使用随机生成的开/关时隙填充它。我不知道如何将我的时间值附加到数组中。有人能帮我吗? 这是我的代码:
daily_slots = np.empty([1], dtype=[('onTime', np.dtype(int)), ('offTime', np.dtype(int))])
# numpy populates the array with whatever is in memory at that time,
# so delete the existing, 'empty' array row
daily_slots = np.delete(daily_slots, 0, 0)
有了这些,我如何附加值? numpy 文档说我应该执行以下操作:
daily_slots = np.append(daily_slots, [700, 800])
但这不起作用,我明白了
Traceback (most recent call last):
File "./controller.py", line 351, in <module>
init_app()
File "./controller.py", line 128, in init_app
build_daily_slots_array()
File "./controller.py", line 307, in build_daily_slots_array
daily_slots = np.append(daily_slots, [700, 800])
File "/usr/lib/python2.7/dist-packages/numpy/lib/function_base.py", line 3555, in append
return concatenate((arr, values), axis=axis)
TypeError: invalid type promotion
我已经尝试了所有我能想到的东西,并且我已经在 numpy 文档中戳了戳,但我没有找到答案。
我没有正确声明数组吗?我希望每个数组“行”由一个二元素数组(ontime 和 offtime)组成。
【问题讨论】:
-
numpy 追加非常慢,因为 numpy 保证连续内存。请改用 python 列表。
-
您可能只需要一个列表。或者,如果你真的想要一个包含一些随机值的 numpy 数组,请使用
np.random。你几乎从不想要np.append。而且您的方法没有多大意义。您初始化empty数组,然后删除一行,然后追加一行……这不是您应该使用 numpy 的方式。 -
这些回复都不能帮助我解决我的问题。建议替代方法并不能回答问题,也无济于事。
-
我正在删除该行,因为当我初始化数组时,numpy 出于某种荒谬的原因将该行与虚拟数据一起放在那里。我找不到任何方法将数组初始化为空,否则我会这样做。我不是在寻找生成随机数据的方法,而是在尝试找到一种方法来存储我在二维数组中创建的随机数据。这应该是我可以得到问题答案的地方。我列出了我正在尝试做的事情,我解释了自己,并展示了我的代码。你能帮我回答我的问题吗?