我numpy從昨天開始學習。
我的目標是
odd index從 numpy 陣列中提取元素,從 numpy 中提取元素even index并垂直并排合并。
假設我有陣列
mat = np.array([[1, 1, 0, 0, 0],
[0, 1, 0, 0, 1],
[1, 0, 0, 1, 1],
[0, 0, 0, 0, 0],
[1, 0, 1, 0, 1]])

我試過的。
--> 我已經完成了轉置,因為我必須垂直并排合并。
mat = np.transpose(mat)
這給了我
[[1 0 1 0 1]
[1 1 0 0 0]
[0 0 0 0 1]
[0 0 1 0 0]
[0 1 1 0 1]]
我試過訪問奇數索引元素
odd = mat[1::2] print(odd)
給我
[[1 1 0 0 0] ----> 錯了……應該是[0,1,0,0,1]對的吧?我很困惑
[0 0 1 0 0]]--->錯了……應該是[0,0,0,0,0]吧?這些是從哪里來的?
我的最終輸出應該像
[[0 0 1 1 1]
[1 0 1 0 0]
[0 0 0 0 1]
[0 0 0 1 0]
[1 0 0 1 1]]
型別 -np.nd array
uj5u.com熱心網友回復:
看起來你想要:
mat[np.r_[1:mat.shape[0]:2,:mat.shape[0]:2]].T
輸出:
array([[0, 0, 1, 1, 1],
[1, 0, 1, 0, 0],
[0, 0, 0, 0, 1],
[0, 0, 0, 1, 0],
[1, 0, 0, 1, 1]])
中間的:
np.r_[1:mat.shape[0]:2,:mat.shape[0]:2]
輸出:array([1, 3, 0, 2, 4])
uj5u.com熱心網友回復:
雖然行的選擇很簡單,但有多種組合方式。
In [244]: mat = np.array([[1, 1, 0, 0, 0],
...: [0, 1, 0, 0, 1],
...: [1, 0, 0, 1, 1],
...: [0, 0, 0, 0, 0],
...: [1, 0, 1, 0, 1]])
奇數行:
In [245]: mat[1::2,:] # or mat[1::2]
Out[245]:
array([[0, 1, 0, 0, 1],
[0, 0, 0, 0, 0]])
偶數行:
In [246]: mat[0::2,:]
Out[246]:
array([[1, 1, 0, 0, 0],
[1, 0, 0, 1, 1],
[1, 0, 1, 0, 1]])
垂直連接行(np.vstack也可以使用):
In [247]: np.concatenate((mat[1::2,:], mat[0::2,:]), axis=0)
Out[247]:
array([[0, 1, 0, 0, 1],
[0, 0, 0, 0, 0],
[1, 1, 0, 0, 0],
[1, 0, 0, 1, 1],
[1, 0, 1, 0, 1]])
但是因為你想要列 - 轉置:
In [248]: np.concatenate((mat[1::2,:], mat[0::2,:]), axis=0).transpose()
Out[248]:
array([[0, 0, 1, 1, 1],
[1, 0, 1, 0, 0],
[0, 0, 0, 0, 1],
[0, 0, 0, 1, 0],
[1, 0, 0, 1, 1]])
我們可以先轉置選擇:
np.concatenate((mat[1::2,:].T, mat[0::2,:].T), axis=1)
或在索引之前轉置(注意“:”切片位置的變化):
np.concatenate((mat.T[:,1::2], mat.T[:,0::2]), axis=1)
在r_另一個答案中,將切片轉換為陣列并將它們連接起來,以制作一行索引陣列。這同樣有效。
uj5u.com熱心網友回復:
所以這里的替代是您可以使用的邏輯。
1. convert array to list
2. Access nested list items based on mat[1::2] - odd & mat[::2] for even
3. concat them using np.concat at `axis =0` vertically.
4. Transpose them.
實施。
mat = np.array([[1, 1, 0, 0, 0],
[0, 1, 0, 0, 1],
[1, 0, 0, 1, 1],
[0, 0, 0, 0, 0],
[1, 0, 1, 0, 1]])
mat_list = mat.tolist() ##############Optional
l_odd = mat_list[1::2]
l_even= mat_list[::2]
mask = np.concatenate((l_odd, l_even), axis=0)
mask = np.transpose(mask)
print(mask)
輸出 #
[[0 0 1 1 1]
[1 0 1 0 0]
[0 0 0 0 1]
[0 0 0 1 0]
[1 0 0 1 1]]
檢查型別
print(type(mask))
給
<class 'numpy.ndarray'>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/533455.html
標籤:Python麻木的
下一篇:CSV檔案中缺少列
