我一直无法在其他地方找到答案。1D Numpy阵列相当于先前,当前和以下元素的压缩
对于一维numpy的随机数组,例如a = np.random.rand(10)
,我想对每个包含它的每个相邻元素(即前一个和后一个元素)的元素执行一个操作。所以,像
write = []
for previous_item, current_item, next_item in zip(a,a[1::],a[2::]):
write += operation_on(previous_item, current_item, next_item)
但是当我尝试用numpy的阵列上的那些片商要做到这一点,它告诉我,a[1::]
等是浮动。是否有一个Numpy-Array等效于压缩数组中的相邻元素?
这里是什么,我不能去上班一个简单的版本:
from random import randint
import math
import numpy as np
size = 3
def logistic(x,b):
return b*x*(1-x)
def scheme(l,c,r,strength,b):
print('neighborhood: ',l,c,r)
new_center = (1-strength)*logistic(c,b)+(strength/2)*(logistic(r,b) + logistic(l,b))
return new_center
def eSimple(c,l=None,r=None):
return c
cml = np.random.rand(size**2)
def evolve(cml, r):
# encode all
cml = np.vectorize(eSimple)(cml[:-2], cml[1:-1], cml[2:])
cml = np.vectorize(scheme)(cml[:-2], cml[1:-1], cml[2:], 0.5, r)
for r in np.arange(3.6, 4.0, 0.05):
evolve(cml,r)
print(cml)
出于某种原因,尽管它正确生成的街区,cml
仅仅是增加其值由一个非常小的(〜1E-6 )从每个步骤的初始随机值开始计算。
我错过了什么?
若本只适用于一维numpy数组? –
我试过你的代码,如果我为operation_on插入一些东西,它对我有用,虽然结果有点无聊(写入被强制为一个空数组,并且将一个标量添加到一个空数组并没有多大作用) –
@ sphericalcowboy I don真的不介意 - 我只想要一种方法来做到这一点。我想使用一维Numpy数组,而不是一个列表,但就目前而言,我只能找出一种方法来完成列表。 –