对numpy数组中每个元素的简单操作

时间:2013-07-03 13:45:38

标签: python numpy

我是numpy的新手,但我认为你不应该对numpy数组进行迭代,因为这会违背numpy的目的。

我正在尝试对numpy数组执行元素操作,但我不明白语法:

代码:

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'

如何在不迭代的情况下从NNC[:,4]NNC[:,5]的每个元素中减去1?

提前致谢,

丹尼尔

2 个答案:

答案 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])

答案 1 :(得分:0)

您可以按列解构矩阵并对您喜欢的列执行操作并重新创建,np.c_允许这样做。例如,矩阵x我们可以像这样从第一列中减去1(并将结果放在z中)

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

这将拉出x上的第一列,即该列上的元素减法,并连接其余未接触的列。做两列只是分手了