python中實數 匹配Python字典中的實數鍵

2021-10-16 23:30:07 字數 2571 閱讀 3604

我有乙個字典,提供從實數元組到標識整數的對映.給定乙個包含數字的元組列表,這些數字在容差範圍內,但不完全等於字典中的容差,我想生成乙個相應整數的列表.

例:tdict =

tlist = [(0.333, 0.333, 0.333), (0.16667, 0.6666667, 0.17), (0.34, 0.33, 0.33), (0.5001, 0.4999, 0.0)]

tol = 0.01

執行我想要的**應該產生結果

ilist = [1,2,1,3]

因為每個元組中的所有數字都在tdict中相應元組中的數字的給定容差範圍內.我可以通過迭代tdict.keys()並單獨比較每個,但我覺得應該有更好的方法.獲取相應整數到這些元組的最有效方法是什麼?它不需要涉及字典,這對我來說似乎是最自然的.我正在使用python 3.

解決方法:

您顯然希望在具有特定網格間距(與您的公差值直接相關)的3d網格上的3d空間中投影點,並建立某種直方圖.給自己寫乙個投影函式:它將乙個任意的3元素列表/元組(乙個描述空間中的點的向量)作為引數,並將其投影到某個網格點上.你這樣做是為了填寫你的字典以及閱讀它.此外,關於字典中的鍵,我認為你應該使用整數元組而不是浮點數,因為我不確定浮點數是否可以相同.

這是乙個實現示例:

from collections import defaultdict

from random import random as rn

class grid(object):

def __init__(self, spacing):

self.spacing = spacing

self.griddict = defaultdict(int)

def add_point(self, coords):

`vid`, a voxel id, is a tuple of indices, indicating one grid

bin for each dimension, e.g. (1, 5, 2)

rule: i_x = int(floor(x_coord / spacing))

vid = tuple([int(c for c in coords])

self.griddict[vid] += 1

def get_point(self, coords):

vid = tuple([int(c for c in coords])

return self.griddict[vid]

def vid_centercoords(self, vid):

return the real coordinates in space for a certain voxel,

which is identified by its voxel id `vid` (a tuple of indices).

return tuple([(i-1)*self.spacing + self.spacing/2 for i in vid])

n = 20

fillpoints = [(rn(),rn(),rn()) for _ in xrange(n)]

testpoints = [(rn(),rn(),rn()) for _ in xrange(n)]

grid = grid(spacing=0.3)

for p in fillpoints:

grid.add_point(p)

print [grid.get_point(p) for p in testpoints]

它的作用:它在3d空間中建立20個隨機向量(所有座標在0和1之間).它使用空間中的這些點填充3d網格.網格在每個維度上的間距為0.3.空間中的這20個點中的每乙個被分配給網格中的某個體素(僅用於3d畫素的單詞).每個賦值將相應體素的計數器增加1(將網格渲染為直方圖).然後,使用另一組隨機的20個向量來讀出體素.這些點再次投射到體素上,但這次計數器只是返回而不是增加.執行測試:

$python gridtest.py

[2, 1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0]

執行您的資料:

fillpoints = [(0.334, 0.333, 0.333), (0.167, 0.666, 0.167), (0.167, 0.666, 0.167), (0.5, 0.5, 0), (0.5, 0.5, 0), (0.5, 0.5, 0)]

testpoints = [(0.333, 0.333, 0.333), (0.16667, 0.6666667, 0.17), (0.34, 0.33, 0.33), (0.5001, 0.4999, 0.0)]

grid = grid(spacing=0.03)

for p in fillpoints:

grid.add_point(p)

print [grid.get_point(p) for p in testpoints]

它根據需要列印[1,2,1,3].我沒有深入考慮關係間距= 3 *容差.這可能是錯的.我只知道存在確定性關係.證明/找到這個公式是留給你作為乙個練習:)

標籤:python,floating-point,python-3-x

python中建立類role 初識Python類

吐槽 學習物件導向就像你追乙個女神一樣,剛剛有點感覺了,過幾天又陷入絕望的感覺,很蛋疼。類的語法 classperson object print learning class test person test就是類person的例項化物件 例項化,就是以person類為模板,在記憶體裡開闢一塊空間...

在python中輸出 在輸出中列印Python版本

如何從指令碼中列印當前python安裝的版本號?嘗試import sys print sys.version 這將列印完整的版本資訊字串。如果您只想要python版本號,那麼bastien l onard的解決方案是最好的。您可能想檢查完整的字串,看看是否需要它或它的一部分。import platf...

python中如何建立包 如何建立python的包

包是模組的集合,更適合乙個專案。像很多的第三方知名的模組都是以包的形式存 簡單的包實現 自己做乙個ammd包,功能簡單的只有加減乘除等功能,加減在乙個模組matham裡,乘除位於另乙個模組裡mathmd。下面是matham模組的 def add x,y return x ydef minus x,y...