這是示例代碼。我想找到一次運行最后兩行的方法,并將結果一次全部回傳到同一個陣列中,而不用串聯,這可能嗎?
import numpy as np
arr = np.ones((3,3,3))
arr[0:2,0:2,0:2]
arr[1:3,1:3,1:3]
結果命令應該像
arr[(0:1,2:3),(0:1,2:3),(0:1,2:3)]
結果的維數將為(2,2,2,2)。
uj5u.com熱心網友回復:
你的陣列和切片:
In [128]: arr = np.arange(27).reshape(3,3,3)
In [129]: a1=arr[0:2,0:2,0:2]
...: a2=arr[1:3,1:3,1:3]
In [130]: a1.shape
Out[130]: (2, 2, 2)
In [131]: a2.shape
Out[131]: (2, 2, 2)
a1并且a2與.views共享資料緩沖區arr。
在一個新維度上加入他們(np.stack也將這樣做):
In [132]: a3 = np.array((a1,a2))
In [133]: a3.shape
Out[133]: (2, 2, 2, 2)
In [134]: a3
Out[134]:
array([[[[ 0, 1],
[ 3, 4]],
[[ 9, 10],
[12, 13]]],
[[[13, 14],
[16, 17]],
[[22, 23],
[25, 26]]]])
請注意扁平值如何不連續(或其他常規模式)。所以他們必須得到某種形式的副本:
In [135]: a3.ravel()
Out[135]: array([ 0, 1, 3, 4, 9, 10, 12, 13, 13, 14, 16, 17, 22, 23, 25, 26])
另一種方法是構建索引,將它們連接起來,然后進行一次索引。那個時候差不多。在這種情況下,我認為這會更復雜。
===
stride_tricks 的另一種方式。我不會承諾任何關于速度的事情。
In [147]: x = np.lib.stride_tricks.sliding_window_view(arr,(2,2,2))
In [148]: x.shape
Out[148]: (2, 2, 2, 2, 2, 2)
In [149]: x[0,0,0]
Out[149]:
array([[[ 0, 1],
[ 3, 4]],
[[ 9, 10],
[12, 13]]])
In [150]: x[1,1,1]
Out[150]:
array([[[13, 14],
[16, 17]],
[[22, 23],
[25, 26]]])
In [151]: x[[0,1],[0,1],[0,1]]
Out[151]:
array([[[[ 0, 1],
[ 3, 4]],
[[ 9, 10],
[12, 13]]],
[[[13, 14],
[16, 17]],
[[22, 23],
[25, 26]]]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/461735.html
