NumPy中的TypeError操作数组

时间:2014-10-08 23:56:50

标签: python arrays numpy

我在单独的.txt文件中有以下字符串:

L#$KJ#()JSEFS(DF)(SD*F
#KJ$H#K$JH@#K$JHD)
SF SDFLKJ#{P@$OJ{SDPFODS{PFO{
#K$HK#JHSFHD(*SHF)SF{HP
#L$H@”#$H”@#L$KH#”@L$K
#~L$KJ#:$SD)FJ)S(DJF)(S
#$KJH#$ 
SDLKFJD(FJ)SDJFSDLFKS 
~L#$KJ:@LK$#J$ 
LSJDF(S*JDF(*SJDF(*J(DSF*J

我必须按列位置获取每个元素,并输出一个元素出现在列中的次数。例如,位置:0或第1列(S:20.0%#:50.0%L:20.0%〜:10.0%)

我已经使用NumPy在python中编写了这个脚本来按行创建一个数组数组但是得到“TypeError:list indices必须是整数,而不是元组”

当我尝试打印第一列时,这是脚本:

import numpy as np
from sys import argv

script, filename = argv

target = open(filename, 'r')

y = []
for x in range(0, 10):
    y.append(np.array(list(target.readline())))

print y[:,1]

我做错了什么?

2 个答案:

答案 0 :(得分:0)

y[:, 1]y[(slice(None, None, None), 1)]的合成糖,这使您更明显地尝试将tuple传递给y.__getitem__

由于ylist,因此不起作用 1

也许你的意思是:

y[:1]

挑出前两项?

1 使用尺寸合适的numpy.ndarray,这可能会导致您的混淆) 功能

答案 1 :(得分:0)

从您的文字txt开始,我可以将其拆分为多行,然后使用zip(*lines)将其重新排列为“'列”。由于线条长度不同,我会使用itertools.izip_longest

lines = txt.splitlines()
[l for l in itertools.izip_longest(*lines)]
制造

[('L', '#', 'S', '#', '#', '#', '#', 'S', '~', 'L'),
 ('#', 'K', 'F', 'K', 'L', '~', '$', 'D', 'L', 'S'),
 ('$', 'J', ' ', '$', '$', 'L', 'K', 'L', '#', 'J'),
 ...
 (None, None, 'O', None, 'K', None, None, None, None, None),
 (None, None, '{', None, None, None, None, None, None, None)]

或者如果我指定一个' _' fillvalue:

X=[l for l in itertools.izip_longest(*lines, fillvalue=' ')]

[('L', '#', 'S', '#', '#', '#', '#', 'S', '~', 'L'),
 ('#', 'K', 'F', 'K', 'L', '~', '$', 'D', 'L', 'S'),
 ('$', 'J', ' ', '$', '$', 'L', 'K', 'L', '#', 'J'),
 ('K', '$', 'S', 'H', 'H', '$', 'J', 'K', '$', 'D'),
 ('J', 'H', 'D', 'K', '@', 'K', 'H', 'F', 'K', 'F'),
 ...
 (' ', ' ', 'P', ' ', 'L', ' ', ' ', ' ', ' ', 'J'),
 (' ', ' ', 'F', ' ', '$', ' ', ' ', ' ', ' ', ' '),
 (' ', ' ', 'O', ' ', 'K', ' ', ' ', ' ', ' ', ' '),
 (' ', ' ', '{', ' ', ' ', ' ', ' ', ' ', ' ', ' ')]

或作为等长字符串的列表:

[''.join(x) for x in X]

或作为一个字符数组(29 x 10):

np.array(X)

array([['L', '#', 'S', '#', '#', '#', '#', 'S', '~', 'L'],
       ['#', 'K', 'F', 'K', 'L', '~', '$', 'D', 'L', 'S'],
       ['$', 'J', ' ', '$', '$', 'L', 'K', 'L', '#', 'J'],
       ...
       [' ', ' ', '{', ' ', ' ', ' ', ' ', ' ', ' ', ' ']], 
      dtype='|S1')

您可以对每个元组,字符串或行进行频率计数。