gpt4 book ai didi

python - 如何使用 2x2 数组对 Python 中的巨大二维数组进行采样以创建字典? (Python 的模板算法)

转载 作者:行者123 更新时间:2023-12-01 04:25:22 29 4
gpt4 key购买 nike

我对编程相当陌生,所以如果这是一个经典而琐碎的问题,我深表歉意。我有一个 100x100 二维值数组,它是通过 matplotlib 绘制的。在此图像中,每个单元格都有其值(范围 0.01.0)和 ID(范围 09999从左上角开始)。我想使用 2x2 移动窗口对矩阵进行采样,该窗口会生成两个字典:

  • 第一个字典:键代表4个单元格的交集;该值表示具有 4 个相邻单元格 ID 的元组(参见下图 - 交集由“N”表示);
  • 第二个字典:键代表4个单元格的交集;该值代表 4 个相邻单元格的平均值(见下图)。

在下面的示例中(左上面板),其中 N 的 ID=0,第一个字典将产生{'0': (0,1,100,101)} 因为单元格朝右侧编号为 0 到 99,向下编号为 0 到 9900,step=100。第二个字典将产生 {'0': 0.775},因为 0.775 是 N 的 4 个相邻单元格的平均值。当然,这些字典必须具有与我拥有的“交集”一样多的键在二维数组上。

如何实现这一点?在这种情况下,字典是最好的“工具”吗?谢谢大家!

enter image description here

PS:我尝试了自己的方法,但我的代码不完整、错误,而且我无法理解它:

a=... #The 2D array which contains the cell values ranging 0.0 to 1.0
neigh=numpy.zeros(4)
mean_neigh=numpy.zeros(10000/4)
for k in range(len(neigh)):
for i in a.shape[0]:
for j in a.shape[1]:
neigh[k]=a[i][j]
...

最佳答案

嗯,字典实际上可能适合您的情况。

您确定您使用的 numpy.array 格式正确吗?我在 API 中没有找到任何 array((int, int)) 形式。无论如何...

声明二维数组后该怎么做

为了使事情有序,让我们创建两个可以处理任何二维方形数组的函数,返回您需要的两个字典:

#this is the one that returns the first dictionary
def dictionarize1(array):
dict1 = {}
count = 0
for x in range(len(array[0]) - 1) :
for y in range(len(array[0]) - 1):
dict1[count] = [array[x][y], array[x][y+1], array[x+1][y], array[x + 1][y+1]]
count = count + 1
return dict1

def dictionarize2(array):
dict2 = {}
counter = 0
for a in range(len(array[0]) - 1) :
for b in range(len(array[0]) - 1):
dict2[counter] = (array[a][b] + array[a][b+1] + array[a+1][b] + array[a + 1][b+1])/4
counter = counter + 1
return dict2

#here's a little trial code to see them working

eighties = [[2.0, 2.2, 2.6, 5.7, 4.7], [2.1, 2.3, 2.3, 5.8, 1.6], [2.0, 2.2, 2.6, 5.7, 4.7],[2.0, 2.2, 2.6, 5.7, 4.7],[2.0, 2.2, 2.6, 5.7, 4.7]]
print("Dictionarize1: \n")
print(dictionarize1(eighties))
print("\n\n")
print("Dictionarize2: \n")
print(dictionarize2(eighties))
print("\n\n")

与第一个代码相比,我更喜欢使用整数作为键,因为Python将打印在这种情况下排序的字典(字典根据定义是未排序的,但如果它们有int键,Python将打印出按键排序的字典)。但是,您可以像我之前那样使用 str(count) 将其更改回字符串。

我希望这会有所帮助,现在我对数学库不太实用,但是我编写的代码应该可以很好地处理您可能想要作为输入的任何 2D 方阵!

关于python - 如何使用 2x2 数组对 Python 中的巨大二维数组进行采样以创建字典? (Python 的模板算法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33216437/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com