简体   繁体   English

如何在Python中切片数组的数组

[英]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). 我正在尝试在python上编写自己的机器学习脚本(我知道有相应的库,但这纯粹是出于乐趣-我正在学习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. 我想从此数据中删除一个尺寸,并对每个像素只有一个值(例如[[[[5],[6],[6],[12] ...)255只是alpha值(我不在乎),我知道这是我需要使用的数组拼接,但是我不知道如何将其应用于此问题。

I've tried; 我试过了; loadedImages[:,1] 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: 只需使用numpy,您就可以做您想做的扩展切片:

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 在此示例中, :表示数组的所有行,而0表示第一列

Have you tried removing the comma on your splice, like loadedimages[:1]? 您是否尝试过删除拼接上的逗号,例如loadedimages [:1]? For this array arr = [ 5, 5, 5, 255] , to remove the 255, you could do arr = arr[:3] . 对于此数组arr = [ 5, 5, 5, 255] ,要删除255,可以执行arr = arr[:3] For multi-dimensional arrays, you could nest the for loops as needed so you could iterate over the individual arrays. 对于多维数组,您可以根据需要嵌套for循环,以便可以遍历各个数组。 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. 另外,在Python中,这种数据结构称为列表。 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. 这在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]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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