a假設我有一個代表 3 個矩形的 3 個中心點的陣列。我想根據陣列中的每個點a通過在 x、y 坐標中1加減來創建其他四個復制點1,如圖所示。
a = np.arange(9).reshape(3,3)
>>>a
>>>out:[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]]
我對 numpy 很陌生。我能想到的是我可以做4個coupies a,第一個做a[:,0] =1,然后a[:,1] =1。第二個做a[:,0] =1,然后。a[:,1]-=1第三個做,a[:,0]-=1然后第四個做。但我知道這很愚蠢。所以我想知道在numpy中是否有更清晰的方法?我的預期輸出:a[:,1] =1a[:,0]-=1a[:,1]-=1
array_1 = [[ 1 2 2]
[ 4 5 5]
[ 7 8 8]]
array_2 = [[ 1 0 2]
[ 4 3 5]
[ 7 6 8]]
array_3 = [[ -1 2 2]
[ 2 5 5]
[ 5 8 8]]
array_4 = [[ -1 0 2]
[ 2 3 5]
[ 5 6 8]]

uj5u.com熱心網友回復:
您可以生成 3D 陣列:
a = np.arange(9).reshape(3,3)
b = np.array([[ 1, 1,0],
[ 1,-1,0],
[-1, 1,0],
[-1,-1,0]])
# or programmatically
from itertools import product
b = np.array(list(product([1,-1], [1,-1], [0])))
out = np.tile(a, (4,1,1)) b[:,None,:]
array([[[ 1, 2, 2],
[ 4, 5, 5],
[ 7, 8, 8]],
[[ 1, 0, 2],
[ 4, 3, 5],
[ 7, 6, 8]],
[[-1, 2, 2],
[ 2, 5, 5],
[ 5, 8, 8]],
[[-1, 0, 2],
[ 2, 3, 5],
[ 5, 6, 8]]])
子集:
out[0]
array([[1, 2, 2],
[4, 5, 5],
[7, 8, 8]])
uj5u.com熱心網友回復:
似乎您需要的是遍歷笛卡爾積,有很多方法可以這樣做,一種是使用 itertools,這里是:
import numpy as np
import itertools
a = np.arange(9).reshape(3,3)
list_of_arrays = []
for seq in itertools.product([1, -1], repeat=2):
b = a.copy()
b[:,0] =seq[0]
b[:,1] =seq[1]
list_of_arrays.append(b)
list_of_arrays:
[array([[1, 2, 2], [4, 5, 5], [7, 8, 8]]), array([[1, 0, 2], [4, 3, 5], [ 7, 6, 8]]), 陣列([[-1, 2, 2], [ 2, 5, 5], [ 5, 8, 8]]), 陣列([[-1, 0, 2] , [ 2, 3, 5], [ 5, 6, 8]])]
uj5u.com熱心網友回復:
使用 numpy 廣播和 itertools 生成班次:
import itertools
import numpy as np
a = np.arange(9).reshape(3, 3)
shifts = np.array([(dx, dy, 0) for dx, dy in itertools.product([1, -1], repeat=2)])
shifted_a = a shifts[:, None]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/473671.html
上一篇:匹配熊貓中的特定年份列
