我正在为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文档上戳了戳,并且我找不到答案。
我没有正确声明阵列吗?我想要每个阵列&#39; row&#39;由两个元素组成(开启时间和关闭时间)。
答案 0 :(得分:0)
np.append
使用np.concatenate
。它不是列表追加的真实副本。它将新值转换为数组并进行连接。 但是为了与结构化数组连接,所有数组必须具有相同的dtype (或至少是兼容的,因此&#39;促销&#39;错误。
这有效:
In [4]: np.append(daily_slots, np.array((700, 800), dtype=daily_slots.dtype))
Out[4]:
array([( 0, 1075970048), (700, 800)],
dtype=[('onTime', '<i4'), ('offTime', '<i4')])
这也有效。我必须添加[]
,以便第二个数组像第一个一样是1d。如果没有他们,那就是0d - 实际上np.append
为游戏添加了所有内容。
In [6]: np.concatenate((daily_slots, np.array([(700, 800)], dtype=daily_slots.dtype)))
Out[6]:
array([( 0, 1075970048), (700, 800)],
dtype=[('onTime', '<i4'), ('offTime', '<i4')])
对于成长和萎缩,列表通常更好。在这种情况下,包含2个元素元组的列表,或者可以是自定义类的列表。
如果它是元组列表,您可以将其包装在np.array
中以将其转换为2d数组,以便于进行计算。