pythonflat怎么设置_python – numpy 2d和1d add flat
如果numpy.add有2個(gè)參數(shù),則將它們作為添加的兩個(gè)操作數(shù).如果給出3個(gè)參數(shù),前兩個(gè)是添加的,第三個(gè)是結(jié)果.實(shí)際上不是結(jié)果,而是應(yīng)該保存結(jié)果的數(shù)組.
所以你用b添加了b并希望將它存儲(chǔ)在[1:3,0:3] .flat中.
讓我們?cè)囋噉p.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.])
所以現(xiàn)在我嘗試了[1:3,0:3] .flat,它返回< numpy.flatiter,位于0x22204e80c10>.這意味著它返回一個(gè)迭代器,因此它不是數(shù)組.但是我們不需要一個(gè)我們想要一個(gè)數(shù)組的迭代器.有一種叫做ravel()的方法.所以嘗試[1:3,0:3] .ravel()會(huì)返回:
array([ 0., 0., 0., 0., 0., 0.])
所以我們有一個(gè)數(shù)組.特別是陣列也可用于存儲(chǔ)結(jié)果(相同的形狀!).所以我嘗試過(guò):
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.]])
所以一個(gè)沒(méi)有改變.這是因?yàn)閞avel()只返回一個(gè)視圖(賦值將傳播到unraveled數(shù)組),否則它會(huì)返回一個(gè)副本.將結(jié)果保存在副本中是沒(méi)有意義的,因?yàn)閛ut參數(shù)的重點(diǎn)是操作是就地完成的.我只是猜測(cè)為什么要制作副本,但我認(rèn)為這是因?yàn)槲覀儚囊粋€(gè)較大的數(shù)組中取出一部分,其中該部分在內(nèi)存中不連續(xù).
所以我建議你不要在這種情況下使用out參數(shù),而是使用np.add的返回并將其存儲(chǔ)在指定區(qū)域中:
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)也有效.
我認(rèn)為這本書(shū)要么已經(jīng)過(guò)時(shí)了,而且它與較舊的numpy版本一起工作,或者它根本就沒(méi)用過(guò),這本書(shū)就是一個(gè)錯(cuò)誤.
總結(jié)
以上是生活随笔為你收集整理的pythonflat怎么设置_python – numpy 2d和1d add flat的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql视图子查询_mysql创建视图
- 下一篇: python数据分析并生成报告_pand