AttributeError: 'numpy.int32' object has no attribute 'append'
AttributeError: 'numpy.int32' object has no attribute 'append'
首先让我展示一下我想做什么。
我有一个矩阵,
x = [1, 2, 1, 2, 3, 3, 2, 3, 1, 2]
我想要做的就是select数组中重复数字的位置并将其打印在矩阵x_new中,其中:
x_new[0]= [0,2,8] (for similar position of repeated 1's in x)
x_new[1]=[1,3,6,9](for similar position of repeated 2's in x)
x_new[2]=[4,5,7] (for similar position of repeated 3's in x)
到目前为止我所做的是:
a=[]
x=m[:,3] #x=np.array([1, 2, 1, 2, 3, 3, 2, 3, 1, 2])
ss=set([i for i in x if sum([1 for a in x if a == i]) > 1])
lenss=len(ss)
for ln in range(lenss):
for k in range(10):
if(x[k]== list(ss)[ln]):
print k
a.append(ln)
print 'next'
但是在 a.append 行显示:
'numpy.int32'对象没有属性'append'
谁能告诉我如何克服这个错误?谢谢
在 Python 2.x 中,您在列表推导中使用的变量会泄漏到周围的名称空间中,因此您使用的 a
变量在列表理解中 -
ss=set([i for i in x if sum([1 for a in x if a == i]) > 1])
将您定义为列表的 a
变量更改为 x
.
的元素
这个例子 -
>>> i
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'i' is not defined
>>> s = [i for i in range(5)]
>>> i
4
您应该在列表 comprehensin 中使用不同的名称,如果您为变量使用更有意义的名称会有所帮助,这会降低 运行 出现此类问题的风险。
这个问题不应该发生在 Python 3.x 中,因为在 Python 3.x 中,列表综合有它自己的命名空间。
您重新分配变量 a
:
在第一行 a=[]
,但你在 ss 生成器中再次使用 a
:
ss=set([i for i in x if sum([1 for
一个in x if a == i]) > 1])
简单示例:
>>> [x for x in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> x
9
>>>
这是针对您的问题的 numpy 解决方案
x = np.array(x)
unique = np.unique(x)
[np.where(x == unique_num) for unique_num in unique]
首先让我展示一下我想做什么。
我有一个矩阵,
x = [1, 2, 1, 2, 3, 3, 2, 3, 1, 2]
我想要做的就是select数组中重复数字的位置并将其打印在矩阵x_new中,其中:
x_new[0]= [0,2,8] (for similar position of repeated 1's in x)
x_new[1]=[1,3,6,9](for similar position of repeated 2's in x)
x_new[2]=[4,5,7] (for similar position of repeated 3's in x)
到目前为止我所做的是:
a=[]
x=m[:,3] #x=np.array([1, 2, 1, 2, 3, 3, 2, 3, 1, 2])
ss=set([i for i in x if sum([1 for a in x if a == i]) > 1])
lenss=len(ss)
for ln in range(lenss):
for k in range(10):
if(x[k]== list(ss)[ln]):
print k
a.append(ln)
print 'next'
但是在 a.append 行显示:
'numpy.int32'对象没有属性'append'
谁能告诉我如何克服这个错误?谢谢
在 Python 2.x 中,您在列表推导中使用的变量会泄漏到周围的名称空间中,因此您使用的 a
变量在列表理解中 -
ss=set([i for i in x if sum([1 for a in x if a == i]) > 1])
将您定义为列表的 a
变量更改为 x
.
这个例子 -
>>> i
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'i' is not defined
>>> s = [i for i in range(5)]
>>> i
4
您应该在列表 comprehensin 中使用不同的名称,如果您为变量使用更有意义的名称会有所帮助,这会降低 运行 出现此类问题的风险。
这个问题不应该发生在 Python 3.x 中,因为在 Python 3.x 中,列表综合有它自己的命名空间。
您重新分配变量 a
:
在第一行 a=[]
,但你在 ss 生成器中再次使用 a
:
ss=set([i for i in x if sum([1 for
一个in x if a == i]) > 1])
简单示例:
>>> [x for x in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> x
9
>>>
这是针对您的问题的 numpy 解决方案
x = np.array(x)
unique = np.unique(x)
[np.where(x == unique_num) for unique_num in unique]