0

在对 Cellular-Automaton 进行编程时(显然没有完成),我遇到了边界问题。本节结果的目标是在矩阵的 (i,j) 位置有一个值,该值描述 0 到 1 之间的随机值(及其直接邻居)的平均值。

如何在不违反边界条件/规则的情况下管理它?

import numpy as np

def arr(size):
    arraySize = size
    Z = np.array([[np.random.uniform(0, 1) for x in range(arraySize)] for y in range(arraySize)])
    return Z

def each_average(i,j,array):
    x= (array[i])+(array[i+1])+(array[i-1])
    y= x[j-1]+x[j]+x[j+1]
    f= y/9
    return f


def average(array):
    i,j=0,0
    average=[]
    while j in range(len(array)):
        while i in range(len(array)):
            i=i+1
            j=j+1
            x = each_average(i,j,array)
            average.append(x)
    return average

Z=arr(4)
print average(Z)
4

1 回答 1

0
def each_average(i, j, matrix, size):
    size -= 1
    values = [matrix[i][j]]
    if i > 0:
        values.append(matrix[i-1][j])
    if i < size:
        values.append(matrix[i+1][j])
    if j > 0:
        values.append(matrix[i][j-1])
    if j < size:
        values.append(matrix[i][j+1])

    return sum(values)/5

size矩阵的大小在哪里。

如果要将矩阵中的每个值转换为它及其邻居的平均值:

def average(matrix, size):
    average_matrix = []
    for i in range(size):
        average_matrix.append([])
        for j in range(size):
            average_matrix[i].append(each_average(i, j, matrix, size))
    return average_matrix

但是,这是低效的,因为不需要再次传入整个矩阵。

def average(matrix, size):
    size -= 1
    average_matrix = []
    for i in range(size):
        average_matrix.append([])
        for j in range(size):
            values = [matrix[i][j]]
            if i > 0:
                values.append(matrix[i-1][j])
            if i < size:
                values.append(matrix[i+1][j])
            if j > 0:
                values.append(matrix[i][j-1])
            if j < size:
                values.append(matrix[i][j+1])
            average_matrix.append(sum(values)/5)
    return average_matrix
于 2014-04-11T13:20:03.513 回答