ฉันกำลังเขียนโค้ดชิ้นเล็กๆ ที่ขึ้นต้นด้วยพื้นผิวที่มีการสอดแทรกที่ฉันสร้างขึ้นก่อนหน้านี้ การประมาณค่าเติมเต็มช่องว่างบนพื้นผิวด้วยค่านาโน ส่วนหนึ่งของการประมวลผลของฉันเกี่ยวข้องกับการดูหน้าต่างท้องถิ่นรอบๆ จุดใดจุดหนึ่ง และการคำนวณการวัดบางอย่างโดยใช้พื้นผิวในพื้นที่ ตามหลักการแล้ว ฉันต้องการให้โค้ดนี้ เท่านั้น สามารถคำนวณใดๆ ได้ หากพื้นผิวในพื้นที่ทั้งหมดไม่มีค่า nan โค้ดจะวนซ้ำผ่านพื้นผิวขนาดใหญ่ดั้งเดิม และตรวจสอบเพื่อดูว่าหน้าต่างท้องถิ่นเกี่ยวกับจุดหนึ่งๆ มีนาโนหรือไม่
ฉันรู้ว่านี่ไม่ใช่วิธีที่มีประสิทธิภาพที่สุดในการทำสิ่งนี้ ความมีประสิทธิภาพด้านเวลาไม่ใช่สิ่งที่ฉันต้องกังวล
นี่คือสิ่งที่ฉันมี:
for in in range(startz,endx):
imin = i - half_tile
imax = i + half_tile +1
for j in range(starty,endy):
jmin = i - half_tile
jmax = i + half_tile +1
#Test the local surface for nan's
z = surface[imin:imax,jmin:jmax]
Test = np.isnan(sum(z))
#conditional statement
if Test:
print 'We have a nan'
#set measures I want to calculate to zero
else:
print 'We have a complete window'
#do a set of calculations
ตัวแปร surface
คือพื้นผิวที่มีการสอดแทรกที่ฉันสร้างขึ้นตั้งแต่แรก ตัวแปร half_tile
เป็นเพียงการกำหนดขนาดของหน้าต่างในเครื่องที่ฉันต้องการใช้ startx,endx,starty,endy
กำลังกำหนดขนาดของพื้นผิวดั้งเดิมเพื่อวนซ้ำ
ที่ฉันประสบปัญหาคือคำสั่งแบบมีเงื่อนไขของฉันดูเหมือนจะไม่ทำงาน มันจะบอกฉันว่าหน้าต่างในเครื่องที่ฉันกำลังประเมินไม่มี nan อยู่ในนั้น แต่โค้ดที่เหลือของฉัน (ซึ่งฉันไม่ได้แสดงที่นี่) จะไม่ทำงานเพราะมันบอกว่ามี nan อยู่ในอาร์เรย์
ตัวอย่างนี้อาจเป็น:
[[ 7.07494104 7.04592032 7.01689961 6.98787889 6.95885817 6.92983745
6.90081674 6.87179602 6.8427753 6.81375458 6.78473387 6.75571315
6.72669243]
[ 7.10077447 7.07175376 7.04273304 7.01371232 6.98469161 6.95567089
6.92665017 6.89762945 6.86860874 6.83958802 6.8105673 6.78154658
6.75252587]
[ 7.12660791 7.09758719 7.06856647 7.03954576 7.01052504 6.98150432
6.9524836 6.92346289 6.89444217 6.86542145 6.83640073 6.80738002
6.7783593 ]
[ 7.15244134 7.12342063 7.09439991 7.06537919 7.03635847 7.00733776
6.97831704 6.94929632 6.9202148 6.89105825 6.86190169 6.83274514
6.80358859]
[ 7.17804068 7.14888413 7.11972758 7.09057103 7.06141448 7.03225793
7.00310137 6.97394482 6.94478827 6.91563172 6.88647517 6.85731862
nan]]
นี่คือตัวอย่างของหน้าต่างในเครื่องที่โค้ดของฉันกำลังประเมิน ในรหัสของฉันนี่จะเป็น z
อาร์เรย์ทั้งหมดมีค่าที่ดี ยกเว้นค่าสุดท้ายคือ nan
ฟังก์ชัน "การตรวจสอบ" ในโค้ดของฉันไม่รับว่ามีนาโนอยู่ในอาร์เรย์ คำสั่งแบบมีเงื่อนไขส่งคืน false
เมื่อควรเป็น true
เพื่อระบุว่ามี nan
อยู่ ฉันขาดอะไรพื้นฐานไปในการตรวจสอบอาเรย์? หรือวิธีการของฉันผิดโดยสิ้นเชิง?
np
บนsum
คุณอาจใช้sum
ในตัวซึ่งมีพฤติกรรมแตกต่างจากnumpy.sum
- person user2357112 supports Monica   schedule 22.03.2017np.isnan(z).sum()
- person juanpa.arrivillaga   schedule 23.03.2017np.isnan(z).any()
น่าจะเหมาะสมกว่า - person user2357112 supports Monica   schedule 23.03.2017