2013-07-03 56 views
3

我是numpy的新手,但我的想法是你不应该在numpy数组上迭代,因为这违背了numpy的目的。在numpy数组中的每个元素的简单操作

我想一个numpy的阵列上执行的elementwise操作,但我不明白apparantly语法:

代码:

for line in fidNNC: 
    temp = line.strip().split() 
    temp.insert(0,0) 
    CC.append(temp[0:7]) 

fidNNC.close() 
NNC = np.array(CC) 
del(CC) 

inds = np.arange(len(NNC))[ NNC[:,4]-1 == NNC[:,1] ] 
NNCX = NNC[inds,:] 
inds = np.arange(len(NNC))[ NNC[:,5]-1 == NNC[:,2] ] 
NNCY = NNC[inds,:] 

文件fidNNC包含约一百万行和十列整数。

错误消息:

inds = np.arange(len(NNC))[ NNC[:,4]-1 == NNC[:,1] ] 
TypeError: unsupported operand type(s) for -: 'numpy.ndarray' and 'int' 

如何减去1从每个和NNC[:,4]每一个元素和NNC[:,5]不反复?

由于提前,

丹尼尔

+0

啊,我应该仔细阅读这个问题/答案,看起来类似于我的问题。 NNC.dtype = | S3 – dansolhe

+0

我在再次查看你的代码后猜测我删除了评论并添加了一个答案。 –

回答

1

读取文件时,您不会转换为int,因此创建的数组具有字符串类型。转换为int它应该工作:

for line in fidNNC: 
    temp = [int(i) for i in line.strip().split()] 
    temp.insert(0,0) 
    CC.append(temp[0:7]) 
+0

是的,完美 - 谢谢先生! – dansolhe

0

您可以通过解构列矩阵和你喜欢并重新创建列执行操作,np.c_允许这样做。例如矩阵X,我们可以从第一列所示(结果放入Z)

z = np.c_[ (x[:,1] - 1), x[:,1:] ] 

这翻出x上的第一列,的elementwise减法该列并连接未触摸的其余部分中减去1列。做两列只是简单地分手

相关问题