簡體   English   中英

作法:給定[U,x,y,z]的值(x,y,z)輸出U的相關值

[英]How to: Given a value (x,y,z) from an arry [U,x,y,z] output associated value of U

這似乎很簡單,但我正在尋找一種計算效率很高(快速)的方式來實現。 我有一組數據,例如N x 4 numpy數組。

 data = [[U[0],x[0],y[0],z[0],
          U[1],x[1],y[1],z[1],
          ....
          U[N],x[N],y[N],z[N]]] 

我想做的是編寫一個函數,該函數將元素x [N],y [N],z [N]的某些給定組合的實際數值作為輸入,並輸出U [N]的數值在同一行中。 沒有描述數據的解析函數,它是純數字的,因此我所需要的只是給出一些物理位置值的組合,例如(x [51],y [51],z [51]),將輸出具有x [51],y [51],z [51]的行中的U。 下面給出一個有關其工作方式的示例:假設x [51] = 2.4,y [51] = 6.3,z [51] = 9.45和U [51] = 13.665

 input >>  
 function(2.4,6.3,9.45)
 output >>
 13.665

因此,從本質上講,我的目標是找出如何編寫可以有效實現此功能的函數!

如果希望進行大量搜索,則可以將U值存儲在字典中,並使用xyz值查找它們,如下所示:

import numpy as np
data = np.array([
    [ 1.234, 3.7, 9.1, 2.74],
    [13.665, 2.4, 6.3, 9.45],
    [12.431, 8.1, 5.3, 4.25]
])
search_dict = dict(zip(map(tuple, data[:, 1:4]), data[:, 0]))
# or search_dict = {tuple(row[1:4]): row[0] for row in data}
search_dict[(2.4, 6.3, 9.45)]
# 13.665

另外,這對熊貓來說是一項好工作:

import pandas as pd
df = pd.DataFrame(data, columns=['U', 'x', 'y', 'z']).set_index(['x', 'y', 'z'])
df.loc[(2.4, 6.3, 9.45), 'U']

構建字典或DataFrame會花費一些時間和內存,但是無論data長度如何,每次搜索都會得到非常快的結果。

如果陣列很大且搜索不多,則可以使用蠻力搜索:

matched_rows = (data[:, 1:4]==np.array([2.4, 6.3, 9.45])).all(axis=1)
data[matched_rows, 0]
# array([13.665])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM