我正在尝试调整给定因子的2D numpy数组,在输出中获得更小的数组.
从图像文件中读取数组,并且一些值应该是NaN(非数字,来自numpy的np.nan):它是来自卫星的遥感测量的结果,并且仅测量了一些像素.
我找到的合适的包是scypy.misc.imresize,但是包含NaN的输出数组中的每个像素都设置为NaN,即使在原始像素中有一些有效数据被插入在一起.
我的解决方案附在此处,我所做的基本上是:
我打算在不同的输出(平均值,中位数,输入像素的标准偏差等)之间添加关键字.
它按预期工作,但在~110px图像上大约需要3秒钟.由于我缺乏python的经验,我正在寻找改进.
有没有人建议如何更好,更有效地做到这一点?
有谁知道已经实现了所有这些东西的图书馆?
谢谢.
这里有一个输出随机像素输入的示例输出,使用下面的代码生成:

import numpy as np
import pylab as plt
from scipy import misc
def resize_2d_nonan(array,factor):
"""
Resize a 2D array by different factor on two axis sipping NaN values.
If a new pixel contains only NaN, it will be set to NaN
Parameters
----------
array : 2D np array
factor : int or tuple. If int x and y factor wil be the same
Returns
------- …Run Code Online (Sandbox Code Playgroud) 我有一个非常大的蒙面NumPy数组(originalArray)有很多行和两列.我想取每两行的平均值originalArray并构建一个newArray其中每行是两行的平均值originalArray(因此行newArray数的一半originalArray).这应该是一件简单的事情,但下面的脚本非常慢.非常感谢社区的任何建议.
newList = []
for i in range(0, originalArray.shape[0], 2):
r = originalArray[i:i+2,:].mean(axis=0)
newList.append(r)
newArray = np.asarray(newList)
Run Code Online (Sandbox Code Playgroud)
必须有一种更优雅的方式来做到这一点.非常感谢!