2017-05-02 106 views
0

我有一個數組,我想添加1到前16行的最後一列,0到17到27行的最後一列。只有當我們想要將數組分割成偶數部分時才能工作,如果我可以將特定行的數組切割成兩個較小的數組,這很容易,因爲我只是追加1和0而不是將數組再次組合在一起。Python數組操作,拆分,刪除

另一種選擇是硬編碼在具體的數字應該通過索引去,但似乎有點複雜

坦白說,我沒有對任何更多的想法,這裏有視覺表示數組問題(與縮短行):

[[0.133987 0.359897 0.000000 0.527855 0.764706 0.212121] 
[0.301506 0.407752 0.013970 0.553386 0.830450 0.272727] 
[0.414438 0.415456 0.023283 0.597853 0.833910 0.333333] 
[0.434815 0.415844 0.046566 0.604616 0.837370 0.363636] 
[0.436664 0.500333 0.093132 0.607321 0.868512 0.366667] 
[0.447560 0.559649 0.098952 0.626934 0.882353 0.393939]] 

我想有它像這樣:`

[[0.133987 0.359897 0.000000 0.527855 0.764706 0.212121 1] 
[0.301506 0.407752 0.013970 0.553386 0.830450 0.272727 1] 
[0.414438 0.415456 0.023283 0.597853 0.833910 0.333333 1] 
[0.434815 0.415844 0.046566 0.604616 0.837370 0.363636 1] 
[0.436664 0.500333 0.093132 0.607321 0.868512 0.366667 0] 
[0.447560 0.559649 0.098952 0.626934 0.882353 0.393939 0]] 
+1

你有一個數組,一個列表或一個numpy數組嗎?每個都有自己的解決方案。 – Evert

+1

你描述了你的嘗試,但看看你的(最佳)嘗試的一些實際代碼可能會有幫助。 – Evert

+0

這是一個numpy數組,我沒有嘗試任何東西,因爲我沒有找到任何方法,所以我甚至不知道從哪裏開始 – Dantuzzo

回答

2

有可能是一個更清潔更有效的方式要做到這一點,但我認爲這是你以後的樣子。

import numpy as np 

data = np.array([[0.133987, 0.359897, 0.000000, 0.527855, 0.764706, 0.212121], [0.301506, 0.407752, 0.013970, 0.553386, 0.830450, 0.272727], [0.414438, 0.415456, 0.023283, 0.597853, 0.833910, 0.333333], [0.434815, 0.415844, 0.046566, 0.604616, 0.837370, 0.363636], [0.436664, 0.500333, 0.093132, 0.607321, 0.868512, 0.366667], [0.447560, 0.559649, 0.098952, 0.626934, 0.882353, 0.393939]]) 

extra = [] 
for i in range(len(data)): 
    if i < 3: 
     extra.append([1]) 
    else: 
     extra.append([0]) 

extra = np.array(extra) 

result = np.hstack([data, extra]) 

print(result) 

導致

[[ 0.133987 0.359897 0.  0.527855 0.764706 0.212121 1.  ] 
[ 0.301506 0.407752 0.01397 0.553386 0.83045 0.272727 1.  ] 
[ 0.414438 0.415456 0.023283 0.597853 0.83391 0.333333 1.  ] 
[ 0.434815 0.415844 0.046566 0.604616 0.83737 0.363636 0.  ] 
[ 0.436664 0.500333 0.093132 0.607321 0.868512 0.366667 0.  ] 
[ 0.44756 0.559649 0.098952 0.626934 0.882353 0.393939 0.  ]] 
+0

'extra = [[int(i

+0

非常感謝列表理解。 – Aklys

0

就使最後一列和將它們連接起來:

arr = np.random.random(size=(27,6)) 
flag = [0]*16 + [1]*11 
flag = np.array([flag]) 
arr_ = np.concatenate([arr, flag.T], axis=1) 

一個numpy的數組的元素必須有統一的dtypes,所以你實際上得到1和0.在最後一列

1

這是一個刪節版本,它需要輸入4行並添加1到前2行,0到剩下的行。您只需調整數字以符合您的要求。

v = [[0.133987, 0.359897, 0.000000, 0.527855, 0.764706, 0.212121], 
    [0.301506, 0.407752, 0.013970, 0.553386, 0.830450, 0.272727], 
    [0.414438, 0.415456, 0.023283, 0.597853, 0.833910, 0.333333], 
    [0.447560, 0.559649, 0.098952, 0.626934, 0.882353, 0.393939]] 

print('before **********') 
for line in v: 
print(line) 

for i, x in enumerate(v): 
    if i < 2: 
     x.append(1) # did you want ints here or floats to be consistent? 
    else: 
     x.append(0) 

print('after **********') 
for line in v: 
    print(line) 

輸出:

before ********** 
[0.133987, 0.359897, 0.0, 0.527855, 0.764706, 0.212121] 
[0.301506, 0.407752, 0.01397, 0.553386, 0.83045, 0.272727] 
[0.414438, 0.415456, 0.023283, 0.597853, 0.83391, 0.333333] 
[0.44756, 0.559649, 0.098952, 0.626934, 0.882353, 0.393939] 
after ********** 
[0.133987, 0.359897, 0.0, 0.527855, 0.764706, 0.212121, 1] 
[0.301506, 0.407752, 0.01397, 0.553386, 0.83045, 0.272727, 1] 
[0.414438, 0.415456, 0.023283, 0.597853, 0.83391, 0.333333, 0] 
[0.44756, 0.559649, 0.098952, 0.626934, 0.882353, 0.393939, 0] 

你也可以縮短追加行

x.append(1 if i < 2 else 0) 

如果你願意的話。