抱歉问了这么蠢的问题。
我正在用PHP编程,但在Python中发现了一些不错的代码,并希望用PHP“重新创建”它。
但我对这句台词很失望:
self.h = -0.1
self.activity = numpy.zeros((512, 512)) + self.h
self.activity[:, :] = self.h
我不明白[:, :]
是什么意思。
我在谷歌上搜索也找不到答案。
完整代码
import math
import numpy
import pygame
from scipy.misc import imsave
from scipy.ndimage.filters import gaussian_filter
class AmariModel(object):
def __init__(self, size):
self.h = -0.1
self.k = 0.05
self.K = 0.125
self.m = 0.025
self.M = 0.065
self.stimulus = -self.h * numpy.random.random(size)
self.activity = numpy.zeros(size) + self.h
self.excitement = numpy.zeros(size)
self.inhibition = numpy.zeros(size)
def stimulate(self):
self.activity[:, :] = self.activity > 0
sigma = 1 / math.sqrt(2 * self.k)
gaussian_filter(self.activity, sigma, 0, self.excitement, "wrap")
self.excitement *= self.K * math.pi / self.k
sigma = 1 / math.sqrt(2 * self.m)
gaussian_filter(self.activity, sigma, 0, self.inhibition, "wrap")
self.inhibition *= self.M * math.pi / self.m
self.activity[:, :] = self.h
self.activity[:, :] += self.excitement
self.activity[:, :] -= self.inhibition
self.activity[:, :] += self.stimulus
class AmariMazeGenerator(object):
def __init__(self, size):
self.model = AmariModel(size)
pygame.init()
self.display = pygame.display.set_mode(size, 0)
pygame.display.set_caption("Amari Maze Generator")
def run(self):
pixels = pygame.surfarray.pixels3d(self.display)
index = 0
running = True
while running:
self.model.stimulate()
pixels[:, :, :] = (255 * (self.model.activity > 0))[:, :, None]
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif event.key == pygame.K_s:
imsave("{0:04d}.png".format(index), pixels[:, :, 0])
index = index + 1
elif event.type == pygame.MOUSEBUTTONDOWN:
position = pygame.mouse.get_pos()
self.model.activity[position] = 1
pygame.quit()
def main():
generator = AmariMazeGenerator((512, 512))
generator.run()
if __name__ == "__main__":
main()
3条答案
按热度按时间hm2xizp91#
[:, :]
代表从开始到结束的一切,就像列表一样,不同的是第一个:
代表第一个维度,第二个:
代表第二个维度。分配到第二行:
分配到第二列:
分配给所有:
abithluo2#
numpy使用元组作为索引,在本例中,这是一个详细的slice assignment。
它相当于更简单的
(这也适用于常规列表)
vtwuwzda3#
这是切片赋值。从技术上讲,它调用1
它将
self.activity
中的所有元素设置为self.h
存储的任何值。这里的代码看起来真的很多余。据我所知,您可以删除上一行中的加法,或者简单地使用切片赋值:或
也许最快的方法是分配一个空数组,然后用期望值
.fill
它:1实际上,在调用
__setitem__
之前会尝试使用__setslice__
,但__setslice__
已被弃用,除非有充分的理由,否则不应在现代代码中使用。