我的代码的相关摘录如下:
import numpy as np
def create_function(duration, start, stop):
rates = np.linspace(start, stop, duration*1000)
return rates
def generate_spikes(duration, start, stop):
rates = [create_function(duration, start, stop)]
array = [np.arange(0, (duration*1000), 1)]
start_value = [np.repeat(start, duration*1000)]
double_array = [np.add(array,array)]
times = np.arange(np.add(start_value,array), np.add(start_value,double_array), rates)
return times/1000.
我知道这是非常低效的编码(特别是start_value和double_array的东西),但它都是试图以某种方式使用arange
列表作为我的输入的产物。
我一直收到这个错误:
Type Error: int() argument must be a string, a bytes-like element, or a number, not 'list'
基本上,我正在尝试做的一个例子是:
我有两个数组a = [1, 2, 3, 4]
和b = [0.1, 0.2, 0.3, 0.4]
,我想使用np.arange
生成[1.1, 1.2, 1.3, 2.2, 2.4, 2.6, 3.3, 3.6, 3.9, 4.4, 4.8, 5.2]
? (我将为数组中的每个元素使用不同的步长。)
这甚至可能吗?如果是这样,我是否必须压扁我的名单?
答案 0 :(得分:1)
您可以在那里使用broadcasting
来提高效率 -
(a + (b[:,None] * a)).ravel('F')
示例运行 -
In [52]: a
Out[52]: array([1, 2, 3, 4])
In [53]: b
Out[53]: array([ 0.1, 0.2, 0.3, 0.4])
In [54]: (a + (b[:,None] * a)).ravel('F')
Out[54]:
array([ 1.1, 1.2, 1.3, 1.4, 2.2, 2.4, 2.6, 2.8, 3.3, 3.6, 3.9,
4.2, 4.4, 4.8, 5.2, 5.6])
查看预期输出,您似乎只使用b
之外的前三个元素进行计算。因此,为了实现该目标,我们只需切片前三个元素并进行计算,如此 -
In [55]: (a + (b[:3,None] * a)).ravel('F')
Out[55]:
array([ 1.1, 1.2, 1.3, 2.2, 2.4, 2.6, 3.3, 3.6, 3.9, 4.4, 4.8,
5.2])