[英]Explanation on Numpy Broadcasting Answer
我最近在這里發了一個問題,答案完全按照我的要求回答。 但是,我認為我高估了我進一步操縱答案的能力。 我閱讀了廣播文檔,並按照一些鏈接引導我回到2002年關於numpy廣播。
我使用了第二種使用廣播創建數組的方法:
N = 10
out = np.zeros((N**3,4),dtype=int)
out[:,:3] = (np.arange(N**3)[:,None]/[N**2,N,1])%N
哪個輸出:
[[0,0,0,0]
[0,0,1,0]
...
[0,1,0,0]
[0,1,1,0]
...
[9,9,8,0]
[9,9,9,0]]
但我不明白通過文檔如何操縱它。 理想情況下,我希望能夠設置每個列更改的增量。
恩。 A列變為0.5至2,B列變為0.2至1,C列變為1至10。
[[0,0,0,0]
[0,0,1,0]
...
[0,0,9,0]
[0,0.2,0,0]
...
[0,0.8,9,0]
[0.5,0,0,0]
...
[1.5,0.8,9,0]]
謝謝你的幫助。
您可以稍微調整當前代碼以使其正常工作。
>>> out = np.zeros((4*5*10,4))
>>> out[:,:3] = (np.arange(4*5*10)[:,None]//(5*10, 10, 1)*(0.5, 0.2, 1)%(2, 1, 10))
>>> out
array([[ 0. , 0. , 0. , 0. ],
[ 0. , 0. , 1. , 0. ],
[ 0. , 0. , 2. , 0. ],
...
[ 0. , 0. , 8. , 0. ],
[ 0. , 0. , 9. , 0. ],
[ 0. , 0.2, 0. , 0. ],
...
[ 0. , 0.8, 9. , 0. ],
[ 0.5, 0. , 0. , 0. ],
...
[ 1.5, 0.8, 9. , 0. ]])
變化是:
int
dtype,因為我們需要它在某些列中保存浮點數。 如果需要,可以指定一個float
dtype(或者甚至更復雜的東西,只允許在前兩列中使用浮點數)。 N**3
總值,計算每列的不同值的數量,並將它們相乘以得到我們的總大小。 這同時用於zeros
和arange
。 //
運算符,因為此時我們需要整數,但稍后我們會想要浮點數。 A,B,C
值的值,除以B*C, C, 1
)。 %
操作中的值以匹配每列的邊界。 這個小例子可以幫助我理解發生了什么:
In [123]: N=2
In [124]: np.arange(N**3)[:,None]/[N**2, N, 1]
Out[124]:
array([[ 0. , 0. , 0. ],
[ 0.25, 0.5 , 1. ],
[ 0.5 , 1. , 2. ],
[ 0.75, 1.5 , 3. ],
[ 1. , 2. , 4. ],
[ 1.25, 2.5 , 5. ],
[ 1.5 , 3. , 6. ],
[ 1.75, 3.5 , 7. ]])
因此,我們生成一系列數字(0到7)並將它們除以4,2和1。
計算的其余部分只是更改每個值而不進一步廣播
將%N
應用於每個元素
In [126]: np.arange(N**3)[:,None]/[N**2, N, 1]%N
Out[126]:
array([[ 0. , 0. , 0. ],
[ 0.25, 0.5 , 1. ],
[ 0.5 , 1. , 0. ],
[ 0.75, 1.5 , 1. ],
[ 1. , 0. , 0. ],
[ 1.25, 0.5 , 1. ],
[ 1.5 , 1. , 0. ],
[ 1.75, 1.5 , 1. ]])
分配給int
數組與將浮點數轉換為整數相同:
In [127]: (np.arange(N**3)[:,None]/[N**2, N, 1]%N).astype(int)
Out[127]:
array([[0, 0, 0],
[0, 0, 1],
[0, 1, 0],
[0, 1, 1],
[1, 0, 0],
[1, 0, 1],
[1, 1, 0],
[1, 1, 1]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.