Python 3.x 如何在numpy数组上定义一个使用数组索引查找字典的函数?
我有一个大的numpy矩阵“mat”,大小为(150000*150000)。我试图在这个numpy数组的每个元素上应用一个函数。该函数使用键范围为0到149999的字典: 步骤1: 将一维数组转换为字典Python 3.x 如何在numpy数组上定义一个使用数组索引查找字典的函数?,python-3.x,pandas,numpy,vectorization,Python 3.x,Pandas,Numpy,Vectorization,我有一个大的numpy矩阵“mat”,大小为(150000*150000)。我试图在这个numpy数组的每个元素上应用一个函数。该函数使用键范围为0到149999的字典: 步骤1: 将一维数组转换为字典 dict1 = dict(enumerate(arr)) # arr is a 1d array of size (150,000*1) 步骤2 定义功能: def find_res(mat): #Psuedo code for each element 'e' in the ar
dict1 = dict(enumerate(arr)) # arr is a 1d array of size (150,000*1)
步骤2
定义功能:
def find_res(mat): #Psuedo code
for each element 'e' in the array, obtain the row index i and column index j
return e/(dict1[i]*dict1[j])
将函数矢量化并查找结果
vfunc = np.vectorize(find_res)
res = vfunc(mat)
我想知道如何定义find_res函数。也许他们的方法更好
样本数据
arr = np.array([5,10,20])
dict1 = dict(enumerate(arr))
print(dict1)
-> {0:5, 1:10, 2:20}
print(mat)
->
[[1 1 1]
[4 4 4]
[6 6 6]]
output:
print(vfunc(mat))
->
[[0.04 0.02 0.01]
[0.08 0.04 0.02 ]
[0.06 0.03 0.015]]
这里的mat大小是3*3,但是原始mat大小是150000*150000我认为没有必要从
1-d
数组创建字典。您可以通过取外积直接变换arr
,然后您可以将矩阵除以此变换后的arr
得到最终结果:
mat / (arr[:, None] * arr)
你能添加一个数据和预期结果的小例子吗?我认为您可以矢量化此操作并避免循环,但我不确定数据格式。感谢您的反馈。刚刚更新了一些示例输入和输出,但是mat矩阵的大小为150000*150000。我有大约500gb的内存,所以这不是问题!
array([[0.04 , 0.02 , 0.01 ],
[0.08 , 0.04 , 0.02 ],
[0.06 , 0.03 , 0.015]])