简体   繁体   中英

How to slice an array of arrays in Python

I'm trying to write my own machine learning scripts on python (I know there are libraries for that but this is purely for the fun of it - I'm in the process of learning Python). I have the following array;

[array([[[  5,   5,   5, 255],
    [  6,   6,   6, 255],
    [  6,   6,   6, 255],
    ..., 
    [ 12,  12,  12, 255],
    [ 10,  10,  10, 255],
    [ 10,  10,  10, 255]],

   [[  8,   8,   8, 255],
    [ 10,  10,  10, 255],
    [ 14,  14,  14, 255],
    ..., 
    [ 15,  15,  15, 255],
    [ 13,  13,  13, 255],
    [ 13,  13,  13, 255]],

It continues on like this for some time. I've got this array using the follow code:

imagesList = listdir("someaddress")
loadedImages = []
for image in imagesList:
    #img = PImage.open()
    loadedImages.append(misc.imread("someaddress" + image))

My logic here is I want to read in image files as arrays of pixel values for use in a image classification problem. As you can tell from the data above, the images are grey scale. I'd like to remove a dimension from this data and just have a single value for each pixel (eg, ([[[5],[6],[6],[12]...) The 255's are just the alpha values (which I don't care about). I know this is array splicing that I need to use, but boy do I have no idea how to apply it to this problem.

I've tried; loadedImages[:,1]

I get the following error;

TypeError: list indices must be integers, not tuple

The result I really want out of this would look as follows

[array([[  5,
  6,
  6,
..., 
 12,
 10,
 10],

 [  8,
   10,
   14,
    ..., 
   15,
   13,
   13,

just use numpy and you can do the kind of extended slicing you want to do:

import numpy as np
a = np.array([[  5,   5,   5, 255],
 [  6,   6,   6, 255],
 [  6,   6,   6, 255]])
# first column:
print(a[:, 0])

in this example, the : represents all rows of the array and the 0 represents the first column

Have you tried removing the comma on your splice, like loadedimages[:1]? For this array arr = [ 5, 5, 5, 255] , to remove the 255, you could do arr = arr[:3] . For multi-dimensional arrays, you could nest the for loops as needed so you could iterate over the individual arrays. eg

main_array = [[  5,   5,   5, 255],
              [  6,   6,   6, 255],
              [  6,   6,   6, 255]]

for sub_array in main_array:
  spliced_array = sub_array[:3]
  print spliced_array

will yield

[5, 5, 5]
[6, 6, 6]
[6, 6, 6]

Also, in Python, this kind of data structure is called a list. It might be the reason why you're having a hard time finding information about it.

Edit: You could try using list comprehensions as well. It's something that's really useful in python. eg

arr = [[  5,   5,   5, 255],
       [  6,   6,   6, 255],
       [  6,   6,   6, 255]]

filtered_arr = [a[0] for a in arr]
filtered_arr
>>>[5,6,6]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM