numpy.ndarray' 对象没有属性 'append

Posted

技术标签:

【中文标题】numpy.ndarray\' 对象没有属性 \'append【英文标题】:numpy.ndarray' object has no attribute 'appendnumpy.ndarray' 对象没有属性 'append 【发布时间】:2020-12-08 04:22:46 【问题描述】:
import numpy as np

Student1= [1,2]
test11= np.array([])
np.clip(0,1,20)
NOF=int(2) 
print("Enter test score, students name are (1,2,3, etc): ")
for i in range(NOF):
    data=int(input())
    test11.append(data)
total=0
for value in test11:
    total=total+value
print("The sum of all", total)

列表版本

import numpy as np

Student1= [1,2]
test11= []
NOF=int(2) 
print("Enter test score, students name are (1,2,3, etc): ")
for i in range(NOF):
    data=int(input())
    test11.append(data)
total=0
for value in test11:
    total=total+value
print("The sum of all", total)

这会一直报错“numpy.ndarray”对象没有“附加”属性。我希望能够将用户数据添加到数组 test11。无需使 test11 成为 numpy 数组即可正常工作。但我希望能够将数字的大小限制为 20。有什么想法吗?请让它变得简单。

错误代码: 回溯(最近一次通话最后): 第 10 行,在 test11.append(数据) AttributeError: 'numpy.ndarray' 对象没有属性 'append'

【问题讨论】:

numpy.ndarray 对象确实没有 append 方法。为什么不使用list 请提供完整的错误输出,以及minimal reproducible example。 np.clip 行对您没有任何作用。重新阅读它的文档。 【参考方案1】:

这看起来很有效。我又改了几行,做了标记。

import numpy as np

Student1= [1,2]
test11= np.array([0])
NOF=int(2) 
print("Enter test score, students name are (1,2,3, etc): ")
data = None
while data is None:  # Remove this if you want the program to end if an error occurres.
    for i in range(NOF):
        try:  # Be sure the input is a int.
            data=np.array([int(input())])
            if data > 20:  # Be sure the input is <= 20.
                data = None  # If greater then 20. Turn data into None
                test11 = np.array([0])  # Empty the array.
                print("Error")
                break  # Then break out of the loop
            test11 = np.append(data, test11)
        except ValueError:
            data = None  # If it is not a int, data will trun into None
            test11 = np.array([0])  # Empty the array.
            print("Error")
            break

if data is not None:  # If data is not None then find the sum.
    total=0
    for value in test11:
        total = test11.sum()  # Use the sum fuction, though  total=total+value  will also work.
    print("The sum of all", total)

列出版本。

# import numpy as np

Student1= [1,2]
test11= []
NOF=int(2) 
print("Enter test score, students name are (1,2,3, etc): ")
data = None  # Assign ahead of time.
while data is None:  # Remove this if you want the program to end if an 
error occurres.
    for i in range(NOF):
        try:  # Be sure the input is a int.
            data=int(input())
            if data > 20:  # Be sure the input is <= 20.
                data = None  # If greater then 20. Turn data into None
                test11.clear()  # Clear the list if an error occurres.
                print("Error")
                break  # Then break out of the loop
            test11.append(data)
        except ValueError:
            data = None  # If it is not a int, data will trun into None
            test11.clear()  # Clear the list if an error occurres.
            print("Error")
            break

if data is not None:  # If data is not None then find the sum.
    total=0
    for value in test11:
        total=total+value
    print("The sum of all", total)

这是尽我所能做到的紧凑,无需更改整个内容,并保持与您开始时的内容相似。

现在用户不能使用超过20的数字,或者任何字母,否则会出现错误。

【讨论】:

对不起,我没说对。剪辑功能没用,因为如果用户键入大于 20 的数字,我希望代码出错 如果你能帮上忙的话。如果不是,我非常感谢你帮助我实施 np。 我们不鼓励使用np.append。列表追加更快更容易使用。 在 hpauli 的评论之上,我想补充一点:您不需要创建一个数组来将一个数字附加到数组中。而你的第二个 for 循环是无关紧要的!循环在没有任何目的的情况下重复做同样的事情。此外,您无需在要分配新值的循环之前设置total=0 再次感谢您的帮助【参考方案2】:

Numpy 数组没有“追加”方法,它们应该以您需要的形状和长度创建。所以在你的情况下,最好的方法是创建一个列表,附加值,然后创建数组:

import numpy as np 
Student1= [1,2] 
test11= []
np.clip(0,1,20) 
NOF=int(2) 
print("Enter test score, students name are (1,2,3, etc): ") 
for i in range(NOF): 
    data=int(input()) 
    test11.append(data)

test11 = np.array(test11)

【讨论】:

【参考方案3】:

你可以用np.append替换你的行:

np.append(test11,data)

但是追加到 numpy 数组比追加到列表更昂贵。我建议将list 结构与append 一起使用,最后使用np.array 将您的列表转换为numpy 数组

这是一个列表版本:

import numpy as np

Student1= [1,2]
test11= []
np.clip(0,1,20)
NOF=int(2) 
print("Enter test score, students name are (1,2,3, etc): ")
for i in range(NOF):
    data=int(input())
    test11.append(data)
test11 = np.array(test11)
total = test11.sum()
print("The sum of all", total)

【讨论】:

当我用 'np.append(test11,data)' 替换它时,它不再累加了:( 我先试试list方法 @GlitterPony 您需要将totol=0; for value in test11: total=total+value 替换为total = test11.sum(),但我再次建议使用列表。另外,请查看***.com/help/someone-answers,了解如何接受关于 SO 的答案并欢迎来到 SO。谢谢。 列出了但我在哪里输入 np.array 到 @GlitterPony 添加列表版本发布

以上是关于numpy.ndarray' 对象没有属性 'append的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError:“numpy.ndarray”对象没有属性“strip”

AttributeError:“numpy.ndarray”对象没有属性“lower”

属性错误:“numpy.ndarray”对象没有属性“value_counts”

带有 ColumnTransformer 的 SKLearn 管道:'numpy.ndarray' 对象没有属性'lower'

AttributeError:“numpy.ndarray”对象没有属性“nipy_spectral”

AttributeError:“numpy.ndarray”对象没有属性“历史”