'努比·恩达雷'object没有'concatenate'属性

2024-09-29 05:20:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一些简单的代码来遍历我正在分析的一组列表(从b1到b20)。对于这些列表,我想先检查其中哪些是空的。对于那些空的,我想添加值0。我想将0添加到空列表中,因为稍后我将合计来自不同列表的值,并且,据我所知,我无法将空列表相加。在

目前,我有以下代码:

for z in np.arange(1,21):
    r=np.array([0])
    rate = eval('b' + str(z))
    print (z)
    if len(rate)==0:
        rate.concatenate(r)
        print (rate)
    else:
        print (rate)


order_x20=b16+c16+d16+h16+i16
order_x2020=b17+c17+d17+h17+i17
order_x2050=b15+c15+d15+h15+i15
order_x20100=b2+c2+d2+h2+i2
order_x20300=b20+c20+d20+h20+i20

每次运行代码时,都会出现以下错误:

^{pr2}$

有人能帮我解决这个问题吗?我真的不明白为什么会出现这个错误,但我想是因为我不能将np.append()或{}与{}函数一起使用?在


Tags: 代码in列表forrate错误evalnp
2条回答
Docstring:
concatenate((a1, a2, ...), axis=0, out=None)
a1, a2, ... : sequence of array_like
    The arrays must have the same shape, except in the dimension
    corresponding to `axis` (the first, by default).

这是一个函数,不是一个方法。它用np.concatenate调用。在

第一个参数是数组(或类似数组)的元组(或更一般的序列)。如果用np.concatenate(a1, a2)调用,a2将被解释为axis参数,它必须是一个简单的数字!在

不要使用np.concatenate(或np.append),就好像它是列表append的克隆一样。alist.append(r)是一个方法调用,并就地操作。numpy函数是functions,并且不在适当的位置执行。它们返回一个新数组。当在循环中重复使用时,效率要低得多。在

从你的描述来看,这听起来像是一个简单的列表理解问题:

^{pr2}$

或写为for循环:

In [20]: newlist = [] 
    ...: for i in alist: 
    ...:     if len(i)==0: 
    ...:         i = [0] 
    ...:     newlist.append(i) 

此列表可以转换为一个数组,其中包含一个(正确的)np.concatenate调用:

^{4}$

要连接两个numpy数组,您必须编写rate = np.concatenate(rate,r,axis=0/1),这取决于您希望如何连接这两个数组。在

相关问题 更多 >