2015-05-22 2 views
1

Работа над проектом, который дает нам свободу владеть тем, что использовать. Поэтому я решил, что изучу python для этого.Элементы суммы в строке (Python/Numpy)

Чтобы сделать этот короткий, я хочу просуммировать все элементы в «строке» матрицы я читал в.

Это то, что мой 2D массив выглядит после того, как я прочитал в моей таблице из моего текста файл.

['0000' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '1'] 
['0001' '0' '1' '0' '1' '0' '0' '0' '0' '1' '0' '0' '0' '0' '1'] 
['0010' '0' '1' '0' '1' '0' '0' '0' '0' '1' '0' '0' '0' '0' '1'] 
['0011' '0' '1' '0' '1' '0' '0' '0' '0' '1' '0' '0' '0' '0' '1'] 
['0100' '0' '0' '0' '0' '0' '1' '0' '1' '0' '0' '1' '0' '0' '1'] 
['0101' '0' '0' '1' '0' '0' '0' '1' '0' '0' '1' '0' '1' '1' '0'] 
['0110' '0' '0' '1' '0' '1' '0' '0' '0' '0' '1' '0' '1' '1' '0'] 
['0111' '0' '0' '1' '0' '0' '0' '0' '0' '0' '1' '0' '0' '1' '0'] 
['1000' '0' '0' '0' '0' '0' '1' '0' '1' '0' '0' '1' '0' '0' '1'] 
['1001' '1' '0' '0' '0' '0' '0' '1' '0' '0' '1' '0' '1' '1' '0'] 
['1010' '1' '0' '0' '0' '1' '0' '0' '0' '0' '1' '0' '1' '1' '0'] 
['1011' '1' '0' '0' '0' '0' '0' '0' '0' '0' '1' '0' '0' '1' '0'] 
['1100' '0' '0' '0' '0' '0' '1' '0' '1' '0' '0' '1' '0' '0' '1'] 
['1101' '0' '0' '0' '0' '0' '0' '1' '0' '0' '0' '0' '1' '1' '0'] 
['1110' '0' '0' '0' '0' '1' '0' '0' '0' '0' '0' '0' '1' '1' '0'] 
['1111' '0' '0' '0' '0' '0' '0' '0' '0' '0' '1' '0' '1' '1' '0'] 

Я хочу суммировать все элементы каждой строки, исключая индекс 0 (4-значные числа). А затем сохраните эти суммы в списке.

Это то, что мой список сумм должен выглядеть следующим образом:

[1, 4, 4, 4, 4, 4, 5, 5, 3,.......,3] (Imagine it was all filled with the right sums) 

Однако, это то, что мой код выхода:

number of rows: 16 
number of cols: 15 
num1s before: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
num1s after : [3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 7, 9, 7] 

Я не уверен, что ошибка, но я думаю, что это связано с преобразованием строки/int. Поскольку моя таблица находится в строках, но я конвертирую ее в ints для суммирования. Отладка показывает правильные результаты, поэтому я не уверен, где ошибка.

Вот мой код:

import numpy 

print ("Reading..") 
txtfile = open("test1.txt", "r") 
print(txtfile.readline()) 
txtfile.close() 

r= numpy.genfromtxt('test1.txt',dtype=str,skiprows=1) 

for x in range (0,len(r)): 
    print(r[x]) 

allTested = [0] * (len(r[0]) - 1) 
num1s = [0] * (len(r[0]) - 1) 

print("number of rows:", len(r)) 
print("number of cols:", len(r[0])) 
print("num1s before:",num1s) 

for x in range (0,len(r)): 
    for y in range(1,len(r[0])): 
     num1s[y-1] += int(r[x][y]) 


print("num1s after :",num1s) 

ответ

2

вас чрезмерно усложнять это

np.sum(array,axis=1).tolist() 

это должно возвращать список, который содержит сумму всех строк

например:

import numpy as np 
array = np.array([range(10),range(10),range(10),range(10)]) 

sum_ = np.sum(array,axis=1).tolist() 

print sum_ 
print type(sum_) 

>> [45, 45, 45, 45] 
>> <type 'list'> 
+0

Ха-ха брат я знаю, что я должен быть усложняя много вещей в питона. Это команда, которая генерирует список? Как и мне не нужен вложенный цикл? – KHMB

+0

yeah '.tolist()' будет генерировать список, и для этого вам не нужен цикл. просто попробуйте – farhawa

+0

Кажется, что не работает. Это то, что я делаю: w = numpy.sum (r, axis = 1) .tolist() , а затем печать w. Когда я запускаю его, я получаю «не могу выполнить сокращение с помощью гибкого типа». Не могли бы вы отредактировать мой код и показать мне, как вы это делаете? Скорее всего, я использую это неправильно. – KHMB

2

Хорошо. Выяснил ответ.

@ wajid Farhani был близок, но он не работал в моем случае.

Его команда для np.sum работает, но мне пришлось выполнить некоторую индексацию, чтобы я мог игнорировать индекс 0 каждой строки. Моя проблема заключалась в том, что я думал, что индексирование 2D-массива было выполнено с помощью массива [x] [y], когда это массив [x, y].

Исправлен код:

import numpy 

print ("Reading..") 
txtfile = open("test1.txt", "r") 
print(txtfile.readline()) 
txtfile.close() 

r= numpy.genfromtxt('test1.txt',dtype=str,skiprows=1) 

for x in range (0,len(r)): 
    print(r[x]) 

allTested = [0] * (len(r[0]) - 1) 
num1s = [0] * (len(r)) 

print("number of rows:", len(r)) 
print("number of cols:", len(r[0])) 
print("num1s before:",num1s) 

array = numpy.array(r,dtype=int) 

s = numpy.sum(array[0:len(array),1:len(array[0])],axis=1).tolist() 

print("num1s after :",s) 

Правильный выход:

num1s before: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
num1s after : [1, 4, 4, 4, 4, 5, 5, 3, 4, 5, 5, 3, 4, 3, 3, 3] 
+0

счастлив, что мой ответ вам помог. Еще одна вещь: 'wajdi' не' wajid' :) – farhawa

+0

Вы по-прежнему усложняете [индексирование массива] (http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html). 's = numpy.sum (array [:, 1:], axis = 1) .tolist()' будет делать то же самое. –