2017-02-25 56 views
1

Hello :)我是一名Python初學者,最近我開始使用numpy,基本上我得到了一個nd-array:data.shape = {55000, 784},裏面充滿了float32值。基於我所做的一個條件,我想將特定的行和它們的列附加到一個新的數組中,這對於格式保持不變是很重要的。例如我想data[5][0-784]追加到一個空陣列..我聽說過一些叫花式索引,仍然無法弄清楚如何使用它,一個例子會幫助我擺脫大時間。我很感謝你們的幫助! - Greets將多維數組中的選定值附加到新數組中

+0

忘記'追加到空數組'。重點應放在行和列的選擇上,最好採用一個動作。您可能需要詳細說明您的選擇條件。 – hpaulj

回答

1

我建議您瀏覽Indexing的文檔。但是,這裏是一個示例。

import numpy as np 

data = np.array([[0, 1, 2], [3, 4, 5]]) 
print(data.shape) 
(2, 3) 

print(data) 
[[0 1 2] 
[3 4 5]] 

selection = data[1, 1:3] 
print(selection) 
[4 5] 

花式索引是一種高級索引功能,它允許使用整數數組進行索引。這是一個例子。

fancy_selection = data[[0, 1], [0, 2]] 
print(fancy_selection) 
[0 5] 

既然您還詢問有關追加,看看Append a NumPy array to a NumPy array。無論如何,這是一個例子。

data_two = np.array([[6, 7, 8]]) 
appended_array = np.concatenate((data, data_two)) 
print(appended_array) 
[[0 1 2] 
[3 4 5] 
[6 7 8]] 
+0

非常感謝您的幫助,這些例子非常有幫助,我可以解決我的問題:)問候!!! –

0

由於@hpaulj建議在他的評論追加數組是可能的,但效率低下,應該避免。讓我們看看你的例子,但讓數字變小一點。

a = np.sum(np.ogrid[1:5, 0.1:0.39:0.1]) 
a 
# array([[ 1.1, 1.2, 1.3], 
#  [ 2.1, 2.2, 2.3], 
#  [ 3.1, 3.2, 3.3], 
#  [ 4.1, 4.2, 4.3]]) 
a.shape 
# (4, 3) 

選擇的一種元素:

a[1,2] 
# 2.3 

選擇一整行:

a[2, :] # or a[2] or a 2[, ...] 
# array([ 3.1, 3.2, 3.3]) 

或柱:

a[:, 1] # or a[..., 1] 
# array([ 1.2, 2.2, 3.2, 4.2]) 

花式索引,觀察到第一個索引不是一個切片,但是一個列表或ar射線:

a[[3,0,0,1], :] # or a[[3,0,0,1]] 
# array([[ 4.1, 4.2, 4.3], 
#  [ 1.1, 1.2, 1.3], 
#  [ 1.1, 1.2, 1.3], 
#  [ 2.1, 2.2, 2.3]]) 

花式索引可以在多個軸上被用於選擇任意的元素並將它們組裝到例如一個新的形狀你可以做一個2x2x2的陣列,像這樣:

a[ [[[0,1], [1,2]], [[3,3], [3,2]]], [[[2,1], [1,1]], [[2,1], [0,0]]] ] 
# array([[[ 1.3, 2.2], 
#   [ 2.2, 3.2]], 
# 
#  [[ 4.3, 4.2], 
#   [ 4.1, 3.1]]]) 

還有邏輯索引

mask = np.isclose(a%1.1, 1.0) 
mask 
# array([[False, False, False], 
#  [ True, False, False], 
#  [False, True, False], 
#  [False, False, True]], dtype=bool) 
a[mask] 
# array([ 2.1, 3.2, 4.3]) 

要合併的陣列,收集他們的列表,並使用concatenate

np.concatenate([a[1:, :2], a[:0:-1, [2,0]]], axis=1) 
# array([[ 2.1, 2.2, 4.3, 4.1], 
#  [ 3.1, 3.2, 3.3, 3.1], 
#  [ 4.1, 4.2, 2.3, 2.1]]) 

希望能幫助你開始。