带有for循环的numpy数组中的条件语句执行

时间:2017-02-17 21:29:49

标签: python-2.7 numpy

X = data[['x_1','x_2']].as_matrix()
y = data['y'].as_matrix()

X_pos = np.array([[X[i]  for i in range(6)if y==1]])

y是一个numpy数组,其值为0和1。

有人可以帮我解释语法吗?

  X_pos = np.array([np.array([X[i]  for i in range(8)])[y[:8].astype('bool')]])
  X_neg = np.array([[np.logical_not(y)]])

打印X_pos,

[[[ 1.          0.87142857  0.62458472]
  [ 1.         -0.02       -0.92358804]
  [ 1.          0.36285714 -0.31893688]
  [ 1.          0.88857143 -0.87043189]]]

当我打印X_neg时,我只得到

[[[ True  True  True  True False False False False]]]

相反,我应该这样,

[[ 1.         -0.80857143  0.8372093 ]
 [ 1.          0.35714286  0.85049834]
 [ 1.         -0.75142857 -0.73089701]
 [ 1.         -0.3         0.12624585]]

1 个答案:

答案 0 :(得分:1)

假设x和y是numpy数组,你的第三行有问题, 你可以这样重写它:

X_pos = np.array([np.array([X[i]  for i in range(6)])[y[:6].astype('bool')]])

for fasle valuse(y)使用:

y_n = numpy.logical_not(y)
X_pos2 = np.array([np.array([X[i]  for i in range(6)])[y_n[:6]]])

这是发生的事情:

  • 您获取X

  • 的所有6个元素
  • 为numpy数组应用y元素的布尔掩码。

  • 将整个结果转换为numpy数组(出于某种原因),如问题所示..