3

我是 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'

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

提前致谢,

丹尼尔

4

2 回答 2

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])
于 2013-07-03T13:59:03.683 回答
0

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

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

这会拉出 x 上的第一列,该列上的元素减法并连接其余未触及的列。做两列只需进一步分解

于 2013-07-03T13:56:55.533 回答