gpt4 book ai didi

python - 通过带有数组列表的 numpy 数组进行广播

转载 作者:行者123 更新时间:2023-12-01 02:42:43 25 4
gpt4 key购买 nike

给定一个邻接表:

adj_list = [array([0,1]),array([0,1,2]),array([0,2])]

还有一个索引数组,

ind_arr = array([0,1,2])

目标:

A = np.zeros((3,3))
for i in ind_arr:
A[i,list(adj_list[x])] = 1.0/float(adj_list[x].shape[0])
<小时/><小时/>

目前,我已经写了:

A[ind_list[:],adj_list[:]] = 1. / len(adj_list[:]) 

并在这个脚手架中尝试了各种索引配置。

最佳答案

这是一种方法 -

lens = np.array([len(i) for i in adj_list])
col_idx = np.concatenate(adj_list)
out = np.zeros((len(lens), col_idx.max()+1))
row_idx = np.repeat(np.arange(len(lens)), lens)
vals = np.repeat(1.0/lens, lens)
out[row_idx, col_idx] = vals

示例输入、输出 -

In [494]: adj_list = [np.array([0,2]),np.array([0,1,4])]

In [496]: out
Out[496]:
array([[ 0.5 , 0. , 0.5 , 0. , 0. ],
[ 0.33333333, 0.33333333, 0. , 0. , 0.33333333]])

稀疏矩阵作为输出

此外,如果您想节省内存并创建稀疏矩阵,这是一个简单的扩展 -

In [506]: from scipy.sparse import csr_matrix

In [507]: csr_matrix((vals, (row_idx, col_idx)), shape=(len(lens), col_idx.max()+1))
Out[507]:
<2x5 sparse matrix of type '<type 'numpy.float64'>'
with 5 stored elements in Compressed Sparse Row format>

In [508]: _.toarray()
Out[508]:
array([[ 0.5 , 0. , 0.5 , 0. , 0. ],
[ 0.33333333, 0.33333333, 0. , 0. , 0.33333333]])

关于python - 通过带有数组列表的 numpy 数组进行广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45513304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com