我是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?
提前致谢,
丹尼尔
答案 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上的第一列,即该列上的元素减法,并连接其余未接触的列。做两列只是分手了