删除行中的元素

时间:2014-07-24 15:25:07

标签: python numpy

我想得到c的答案,其中c被定义为:

c = x + y

我有x和y的以下条目:

x y
-2 5
-3 10
2 15
4 20
6 25

获取数据,我从csv文件加载它:

data=np.loadtxt('data.csv',delimiter=',',skiprows=1)
x_value= data[:,0]
y_value= data[:,1]

代码正常工作,直到我决定删除x的否定条目。我有:

x_value1= [x for x in x_value if float(x)>0]

现在返回错误。我知道为了使它工作,我还必须删除5和10,因为方程的条目不一样。我不知道该怎么做。

3 个答案:

答案 0 :(得分:1)

你可能会想要放弃列表理解,因为这是一个更长的操作,它将涉及多个列表。您可以只使用索引,并将非负数据复制到新列表中:

new_x = []
new_y = []
for i in range(len(x)):
  if x[i] >= 0:
    new_x.append(x[i])
    new_y.append(y[i])

使用zip的替代策略:

new_x = []
new_y = []
for x_elem, y_elem in zip(x,y):
  if x_elem >= 0:
    new_x.append(x_elem)
    new_y.append(y_elem)

我不确定是否有更简洁的方法,但我更喜欢更长,更可读的代码。

答案 1 :(得分:1)

使用data上的逻辑,检查每个2元组的第一个条目的否定值:

>>> data
array([[-2,  5],
       [-3, 10],
       [ 2, 15],
       [ 4, 20],
       [ 6, 25]])

>>> data2 = n.array([x for x in data if float(x[0])>0]) # x here is each row
>>> data2
array([[ 2, 15],
       [ 4, 20],
       [ 6, 25]])

答案 2 :(得分:1)

可能你会尝试类似的东西:

data[data[:,0]>0]

在类似的答案中暗示:filtering lines in a numpy array according to values in a range