2017-09-27 35 views
0

我正试图在Python上编写自己的机器学习脚本(我知道这里有一些库,但这纯粹是为了它的乐趣 - 我正在学习Python)。我有以下数组;如何在Python中对数组进行切片

[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]], 

它继续像这样一段时间。我有使用如下代码此阵:

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

我在这里的逻辑是我想读的图像文件作为在图像分类问题,使用像素值的阵列。从上面的数据可以看出,图像是灰度的。我想从这个数据中删除一个维度,并且每个像素只有一个值(例如([[[5],[6],[6],[12] ...)。这些255就是alpha值(我不在乎)我知道这是我需要使用的阵列拼接,但是男孩我不知道如何将它应用到这个问题上

我试过了; loadedImages [:1]

我碰到下面的错误;

TypeError: list indices must be integers, not tuple 

结果我真的想出来的,这将如下所示

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

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

你为什么在索引中输入逗号?另外,[这个问题](https://stackoverflow.com/questions/509211/explain-slice-notation)可能会有所帮助。 – Jerrybibo

+0

@Jerrybibo如果我是诚实的,我已经浏览了一堆SO问题,这就是他们似乎做的。我有点在海上! – user6916458

+0

另外,它的数组'切'不''拼接' – acushner

回答

1

您是否尝试删除拼接上的逗号,如loadedimages [:1]?对于这个数组arr = [ 5, 5, 5, 255],要删除255,你可以做arr = arr[:3]。对于多维数组,您可以根据需要嵌套for循环,以便遍历各个数组。例如

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 

将产生

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

此外,在Python中,这种数据结构被称为列表。这可能是你很难找到关于它的信息的原因。

编辑:你也可以尝试使用列表解析。这在Python中非常有用。例如

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] 
+0

嘿,感谢您的意见。我真正想要的只是每行中的一个数字(例如5 ... 6 .... 6 ...),不需要全部3次! – user6916458

+0

如果是这样的话,你可以做arr [:1]或简单的arr [0]。它将得到列表的第一个元素。在我给出的例子中使用相同的逻辑。 – jabargas

+0

谢谢。然后,我如何将它放回到相同格式的数组中?我仍然希望数组与最内层的数组被替换为相同的形式。 – user6916458

1

只使用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]) 
在这个例子中

,该:代表阵列中的所有行和0代表的第一列

+0

我在开始时有一组额外的方括号,如何改变* slicing *的语法? :) – user6916458

+0

公平的问题。基本上,排序从外到内,所以要得到第一列,你会想'a [:,:0]' – acushner

+0

@acuchner给我错误中陈述的错误(TypeError:list indices must是整数,而不是元组) – user6916458

相关问题