pythonflat怎么设置_python – numpy 2d和1d add flat
如果numpy.add有2個參數,則將它們作為添加的兩個操作數.如果給出3個參數,前兩個是添加的,第三個是結果.實際上不是結果,而是應該保存結果的數組.
所以你用b添加了b并希望將它存儲在[1:3,0:3] .flat中.
讓我們試試np.add(b,b)給出
import numpy as np
a = np.zeros((4, 5))
b = np.ones(6)
np.add(b, b)
# returns array([ 2., 2., 2., 2., 2., 2.])
所以現在我嘗試了[1:3,0:3] .flat,它返回< numpy.flatiter,位于0x22204e80c10>.這意味著它返回一個迭代器,因此它不是數組.但是我們不需要一個我們想要一個數組的迭代器.有一種叫做ravel()的方法.所以嘗試[1:3,0:3] .ravel()會返回:
array([ 0., 0., 0., 0., 0., 0.])
所以我們有一個數組.特別是陣列也可用于存儲結果(相同的形狀!).所以我嘗試過:
np.add(b, b, a[1:3, 0:3].ravel())
# array([ 2., 2., 2., 2., 2., 2.])
但是讓我們看看是否有變化:
a
#array([[ 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0.],
# [ 0., 0., 0., 0., 0.]])
所以一個沒有改變.這是因為ravel()只返回一個視圖(賦值將傳播到unraveled數組),否則它會返回一個副本.將結果保存在副本中是沒有意義的,因為out參數的重點是操作是就地完成的.我只是猜測為什么要制作副本,但我認為這是因為我們從一個較大的數組中取出一部分,其中該部分在內存中不連續.
所以我建議你不要在這種情況下使用out參數,而是使用np.add的返回并將其存儲在指定區域中:
a[1:3, 0:3] = np.add(b, b).reshape(2,3) # You need to reshape here!
a
#array([[ 0., 0., 0., 0., 0.],
# [ 2., 2., 2., 0., 0.],
# [ 2., 2., 2., 0., 0.],
# [ 0., 0., 0., 0., 0.]])
此外,[1:3,0:3] .flat = np.add(b,b)也有效.
我認為這本書要么已經過時了,而且它與較舊的numpy版本一起工作,或者它根本就沒用過,這本書就是一個錯誤.
總結
以上是生活随笔為你收集整理的pythonflat怎么设置_python – numpy 2d和1d add flat的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql视图子查询_mysql创建视图
- 下一篇: man mysql_几个容易被忽略的my