2016-02-15 2 views
0

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

import numpy as np 
import cv2 
import math 
from scipy import misc 
from PIL import Image 

#load image 
img = Image.open("X.png") 

#my functions being defined here 
def somefunctions(): 
return some_results 

A = [] 

for i in range(0,13): 
    A.append([]) 
    for j in range(0,13): 

     # DO SOME PROCESSING 


     # Compute weights 
     Ckr = Ckr_sg(some input) 
     # Ckr is a 5*5 array 

     # add new Ckr to the array A 
     print type(A) 
     A[i].append(A.extend(Ckr)) 

Однако, моя проблема в том, что считается типом списка и каждый раз, когда значение None также добавлено также как:

<type 'list'> 
[[None], array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.13533528, 0.36787944, 1.  , 0.36787944, 0.13533528]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575])] 
<type 'list'> 
[[None, None], array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.13533528, 0.36787944, 1.  , 0.36787944, 0.13533528]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575]), array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.13533528, 0.36787944, 1.  , 0.36787944, 0.13533528]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575])] 
<type 'list'> 
[[None, None, None], array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.13533528, 0.36787944, 1.  , 0.36787944, 0.13533528]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575]), array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.13533528, 0.36787944, 1.  , 0.36787944, 0.13533528]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575]), array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.13533528, 0.36787944, 1.  , 0.36787944, 0.13533528]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575])] 
<type 'list'> 
[[None, None, None, None], array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.13533528, 0.36787944, 1.  , 0.36787944, 0.13533528]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575]), array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.13533528, 0.36787944, 1.  , 0.36787944, 0.13533528]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575]), array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.13533528, 0.36787944, 1.  , 0.36787944, 0.13533528]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575]), array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.13533528, 0.36787944, 1.  , 0.36787944, 0.13533528]), array([ 0.10687793, 0.24311673, 0.36787944, 0.24311673, 0.10687793]), array([ 0.05910575, 0.10687793, 0.13533528, 0.10687793, 0.05910575])] 

, но мне нравятся эти значения. Что мне делать?

+0

** коррекция >> ** Я не люблю значения None. – AMN

+0

Я думаю, что вы можете сделать A.extend (B), и он будет сочетать A и B – AK47

+0

Нет, у этого пути нет ответов .. Когда j = 0, значение A равно «None», а тип - «list», когда J = 1; тип изменяется на «NoneType», и поэтому ** продление ** не работает !!! – AMN

ответ

0

Поскольку вы уже используете numpy, я рекомендую вам предварительно выделить массив numpy и затем заполнить его. Например

A=np.empty((13, 13), dtype=np.int32) 
for j in range(0,13): 
    for j in range(0,13): 
     A[j, k] = .... whatever you want ... 

Таким образом, вероятно, более эффективным, чем то, что вы делаете, и что более важно, это делает тип данных/форма массива обработки проще - весь массив 13x13 сделано для вас на первой линии, а затем вы просто нужно беспокоиться о том, что вы в нее вложили.

np.empty создает массив неинициализированных значений. Вы также можете использовать np.zeros и np.ones.

+0

Новый массив, который я хочу добавить, представляет собой массив 5 * 5 .. ни одно значение! – AMN

+0

Если он всегда будет 5x5, вы можете предварительно выделить массив 13x13x5x5. Но вы правы, что если в вашем большом массиве будут разнородные объекты, то лучше придерживаться списков Python. –

0

Попробуйте проверки значения, прежде чем добавлять их в свой список:

if not(None in Ckr): 
    # Append it 

или в качестве альтернативы:

Ckr = [item for item in Ckr if not(item is None)] 
Смежные вопросы