相关疑难解决方法(0)

调整除NaN之外的2D numpy数组的大小

我正在尝试调整给定因子的2D numpy数组,在输出中获得更小的数组.

从图像文件中读取数组,并且一些值应该是NaN(非数字,来自numpy的np.nan):它是来自卫星的遥感测量的结果,并且仅测量了一些像素.

我找到的合适的包是scypy.misc.imresize,但是包含NaN的输出数组中的每个像素都设置为NaN,即使在原始像素中有一些有效数据被插入在一起.

我的解决方案附在此处,我所做的基本上是:

  • 根据原始数组形状和所需的缩减系数创建一个新数组
  • 创建一个索引数组,以解决原始数组中要为新像素中的每个像素求平均值的所有像素
  • 循环通过新的阵列像素并平均所有非NaN像素以获得新的阵列像素值; 它只有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)

python arrays numpy image

7
推荐指数
1
解决办法
3068
查看次数

快速获取.npy数组中每N行的平均值

我有一个非常大的蒙面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)

必须有一种更优雅的方式来做到这一点.非常感谢!

python numpy

5
推荐指数
2
解决办法
5620
查看次数

标签 统计

numpy ×2

python ×2

arrays ×1

image ×1