2017-09-27 73 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

相關問題