此代碼使用給定標準掃描相鄰元素。例如,它從
0.26373153 開始并選擇 0.58720689,因為標準說選擇小于 0.6 的元素。同樣,它從 0.58720689 移動到 0.54531058。附加當前輸出和所需輸出。
如何獲得每次迭代的時間輸出?假設時間回圈從 0.26373153 的 t=0 開始,然后對于下一個值 t>0:0.58720689,0.54531058,...
import numpy as np
def get_neighbor_indices(position, dimensions):
'''
dimensions is a shape of np.array
'''
i, j = position
indices = [(i 1,j), (i-1,j), (i,j 1), (i,j-1)]
return [
(i,j) for i,j in indices
if i>=0 and i<dimensions[0]
and j>=0 and j<dimensions[1]
]
def iterate_array(init_i, init_j, arr, condition_func):
'''
arr is an instance of np.array
condition_func is a function (value) => boolean
'''
indices_to_check = [(init_i,init_j)]
checked_indices = set()
result = []
while indices_to_check:
pos = indices_to_check.pop()
if pos in checked_indices:
continue
item = arr[pos]
checked_indices.add(pos)
if condition_func(item):
result.append(item)
indices_to_check.extend(
get_neighbor_indices(pos, arr.shape)
)
return result
#P1 = np.random.rand(10,10)
P1=np.array([[ 1.40591794, 0.26373153, 0.98327887, 11.26958535, 1.25191783],
[ 0.54531058, 0.58720689, 0.54674676, 3.89351201, 3.73486589],
[ 0.50904881, 0.16939308, 0.27069582, 0.61941143, 0.88792361],
[ 0.61828522, 0.30061379, 0.62551028, 0.28315714, 0.989013 ],
[ 0.39175302, 0.30969749, 1.59701676, 2.11862101, 0.81709991]])
T=iterate_array(0,1, P1, lambda x : x < 0.6)
print(T)
當前輸出為
[0.26373153, 0.58720689, 0.54531058, 0.50904881, 0.16939308, 0.27069582, 0.54674676, 0.30061379, 0.30969749, 0.39175302]
此外,帶有每個值時間戳的所需輸出應如下所示。這些值只是為了演示,因為我真的不知道實際的時間回圈會顯示什么。
[0,0.01,0.013,....]
uj5u.com熱心網友回復:
我不確定你需要什么。如果您需要計算代碼之前嘗試了多少次才能看到另一個小于 0.6 的值,這可以很容易地創建一個變數,該變數在每次迭代時增加,并在找到“正確”值時設定為 0。如果您需要計算在找到另一個小于 0.6 的值之前運行多少時間,您需要使用該time庫。該指令將自紀元(紀元t1 = time.time()是 1970 年 1 月 1 日 00:00:00)以來經過的秒數保存在 t1 中作為浮點數(參見此處更多細節),因此當您開始研究時,您將時間保存在一個變數中(例如 t1),當您在陣列中找到小于 0.6 的值時,您將當前時間保存在另一個變數中(例如 t2),并且此時要知道您需要計算多少時間(t2-t1);然后將 t2 的值保存在 t1 中并像這樣繼續。
編輯:通過您的編輯,我了解您的需求。試試這個,但記得添加import time:
def iterate_array(init_i, init_j, arr, condition_func):
'''
arr is an instance of np.array
condition_func is a function (value) => boolean
'''
indices_to_check = [(init_i,init_j)]
checked_indices = set()
result = []
t0 = None
t1 = None
timestamps = []
while indices_to_check:
pos = indices_to_check.pop()
if pos in checked_indices:
continue
item = arr[pos]
checked_indices.add(pos)
if condition_func(item):
result.append(item)
t1=time.time()
if(t0==None):
t0=t1
timestamps.append(t1-t0)
indices_to_check.extend(
get_neighbor_indices(pos, arr.shape)
)
return result,timestamps
....
T,timestamps=iterate_array(0,1, P1, lambda x : x < 0.6)
print(T)
print(timestamps)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/439826.html
下一篇:將索引陣列轉換為索引為一的零陣列
