【问题标题】:How to assign labels to tuples in Python?如何在 Python 中为元组分配标签?
【发布时间】:2020-03-08 13:19:10
【问题描述】:

我是 Python 新手,在处理简单的事情时遇到了麻烦。我正在尝试为随机(x,y)s 实现感知器。我有两个类N 和P,我希望N 类的数据将1 作为标签,P 类的数据将0 作为标签以供进一步计算。 N 和 P 定义如下:

random_positive = np.random.normal(100,45,100)
random_negative = np.random.normal(-100,45,100)
N=[(x,y) for x,y in zip(random_positive,random_negative)] 
P=[(x,y) for x,y in zip(random_negative,random_positive)]

我编写了以下代码,但结果不是我所期望的。

for (x,y) in N:
    z = 1
for (x,y) in P:
    z = 0

【问题讨论】:

  • 目前尚不清楚您要在这里完成什么。 z 是一个变量,您只需在循环中保持覆盖即可。我不确定你期望它是什么。顺便说一句,[(x,y) for x,y in zip(random_positive,random_negative)] 是一种过于冗长的处理方式 list(zip(random_positive, random_negative))
  • 无论如何,你的错误正在发生,因为你试图调用 z,在你的两个循环之后它只是0,因为你只是覆盖了相同的多变的。实际上,您的两个循环都可以简单地替换为 z = 0 以获得相同的结果。无论如何,int 对象不可调用,因此出现错误。
  • z 是一个整数。你为什么z()?
  • @FreeSoul 什么? matplotlib 可以与 numpy.ndarray 对象一起使用,这可能也是您想要的。因此,不要使用 zip,而是使用 np.stack([random_positive, random_negative], axis=0),或者将各列分开,具体取决于您要使用的绘图。
  • @mdk 不,根本不是一个真正的答案,因为 OP 正在讨论数据集上下文中的标签,即带有“标签”(0 或 1)的第三列对应该行数据。

标签: python numpy neural-network tuples perceptron


【解决方案1】:
import numpy as np
random_positive = np.random.normal(100,45,100)
random_negative = np.random.normal(-100,45,100)
N=[(x,y) for x,y in zip(random_positive,random_negative)] 
P=[(x,y) for x,y in zip(random_negative,random_positive)]

N1=[]
for i in N:
    i=i+(1,)
    N1.append(i)
P1=[]
for j in P:
    j=j+(0,)
    P1.append(j)

所以 N1 和 P1 将具有您需要的输出格式。

现在当你输入你的“坐标”并且必须根据它分别属于 N1 还是 P1 来分配“标签” 1 或 0 时,运行以下代码:

#lets assume that your input coordinates are "a" and "b"
(a,b)=(52.98933490111767, -59.3188037771503)
for i in N1:
    if (a,b)==(i[0],i[1]):
        z=i[2]
for j in P1:
    if (a,b)==(j[0],j[1]):
        z=j[2]

运行上述代码后,如果N1 中存在(a,b),则z 将是1,如果P1 中存在(a,b),则z 将是0。

【讨论】:

  • 这很有帮助。
【解决方案2】:

这是你想要的吗?

import numpy as np

random_positive = np.random.normal(100,45,100)
random_negative = np.random.normal(-100,45,100)
N=[(x,y,z) for x,y,z in zip(random_positive, random_negative, [1])] 
P=[(x,y,z) for x,y,z in zip(random_negative, random_positive, [0])]

print(N)
[(139.78882745432074, -58.398783286084324, 1)]
print(P)
[(-58.398783286084324, 139.78882745432074, 0)]

【讨论】:

  • 你为什么用熊猫?
【解决方案3】:
random_positive = np.random.normal(100,45,100)
random_negative = np.random.normal(-100,45,100)
N=[(x,y,1) for x,y in zip(random_positive, random_negative)] 
P=[(x,y,0) for x,y in zip(random_negative, random_positive)]

这就是你想要的元组。

我考虑了您的回复。 下面呢?

import numpy as np

random_positive = np.random.normal(100,45,5)
random_negative = np.random.normal(-100,45,5)
N=[(x,y) for x,y in zip(random_positive, random_negative)] 
P=[(x,y) for x,y in zip(random_negative, random_positive)]
Z1={(x,y): 1 for x, y in N}
Z2={(x,y): 0 for x, y in P}
Z=dict()
Z.update(Z1)
Z.update(Z2)
print(Z)
print(Z[N[2]])
print(Z[P[2]])

【讨论】:

  • 我不希望 z 成为元组的一部分。我想要……当我稍后给它一个坐标时,它可以返回那个 (x,y) 的标签。
【解决方案4】:
import numpy as np
random_positive = np.random.normal(100,45,100)
random_negative = np.random.normal(-100,45,100)
N=list(zip(random_positive, random_negative, [1]*len(random_positive)))
P=list(zip(random_negative, random_positive, [0]*len(random_positive)))

正如 juanpa.arrivillaga 所述,list() 是一种更好的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多