Python 如何从numpy中的np.poly1d生成函数列表(数组)?
我正在浏览一些代表蒸发水量的图片。我下面的代码在图像中循环并为每个像素生成一个多项式函数。但是,在将poly_fn附加到列表z之后,只附加系数。有人能推荐一种解决方案,让函数也存储在列表z中吗?列表z必须有351行和308列。我将tif文件附加到一个zip文件夹中Python 如何从numpy中的np.poly1d生成函数列表(数组)?,python,arrays,numpy,arcgis,arcpy,Python,Arrays,Numpy,Arcgis,Arcpy,我正在浏览一些代表蒸发水量的图片。我下面的代码在图像中循环并为每个像素生成一个多项式函数。但是,在将poly_fn附加到列表z之后,只附加系数。有人能推荐一种解决方案,让函数也存储在列表z中吗?列表z必须有351行和308列。我将tif文件附加到一个zip文件夹中 import os import glob import arcpy import numpy as np arcpy.CheckOutExtension("Spatial") arcpy.env.overwriteOutput =
import os
import glob
import arcpy
import numpy as np
arcpy.CheckOutExtension("Spatial")
arcpy.env.overwriteOutput = True
arcpy.env.scratchWorkspace = r'E:\Alcalde\Scratch'
Scratchws = r'E:\Alcalde\Scratch\\'
KC_list = glob.glob(r'E:\Alcalde\Kc\*.tif')
KC_array = []
dates = []
for KC_tiff in KC_list:
name = os.path.basename(KC_tiff).split(".")[0]
date = os.path.basename(name).split("_")[2]
date = float(date[-3:])
KC_arr = arcpy.RasterToNumPyArray(KC_tiff)
KC_array.append(KC_arr)
shape = numpy.shape(KC_arr)
date_arr = np.full(shape, date)
dates.append(date_arr)
z = []
for row in range(0, 351):
for column in range(0,308):
x = []
y = []
for img in range(0,43):
pixel = KC_array[img][row][column]
date = dates[img][row][column]
x.append(dates[img][row][column])
y.append(KC_array[img][row][column])
print("Pixel (Row, Column): " + str(row) + "," + str(column))
poly = np.polyfit(x, y, 3)
poly_fn = np.poly1d(poly)
z.append(poly_fn)
print(poly_fn)
print("====================================")
w = np.array([np.array(xi) for xi in z])
q = np.reshape(w, (351, 308, 4))
print(q[350][307])
print("Complete..")
z
应该是poly1d
对象的列表。你想用w
做什么np.数组(xi)
是一个由一个poly1d
的系数组成的4元素数组。您没有创建poly1d
对象的数组。用一个poly1d
对象向我们展示您正在尝试做什么,并解释原因。一旦你拥有了阵列,你希望它做什么?谢谢!那么,我该如何使z成为poly1d对象的列表呢?每个poly1d对象是每个像素的函数(y是裁剪系数,x表示一年中的某一天)。这几乎是一个插值。我希望能够创建一个poly1d对象数组,然后在一年中的每一天运行for循环。z
是这些对象的列表。我们可以创建一个包含相同指针的对象数据类型数组。但是为什么不循环使用z
本身呢?为什么不将z
保存为一个嵌套列表,一个包含351个子列表的列表?您可以访问它z[i][j]
。无论如何,您都没有使用数组样式的索引w[i,j]
,因此您不会因为坚持使用列表而丢失任何东西。尝试使用对象数组只会使事情复杂化,特别是如果您对这个概念还不熟悉的话。