gpt4 book ai didi

python - 使用列表理解创建 numPy 数组

转载 作者:行者123 更新时间:2023-11-28 21:44:12 25 4
gpt4 key购买 nike

假设我有两个 numPy 数组 arr1arr2:

arr1 = np.random.randint(3, size = 100)

arr2 = np.random.randint(3, size = 100)

我想构建一个包含联合出现次数的矩阵。换句话说,对于 arr1 中所有为 0 的值,找到 arr2 中也为 0 且位于相同位置的元素。所以,我想得到以下矩阵:

M = [[p(0,0), p(0,1), p(0,2)],
[p(1,0), p(1,1), p(1,2)],
[p(2,0), p(2,1), p(2,2)]]

其中 p(0,0) 代表在 arr1 上为 0 和在 arr2 上为 0 的出现次数。

第一次尝试:

作为第一次尝试,我尝试了以下方法:

[[sum(arr1[arr2 == y] == x) for x in np.arange(0,3)] for y in np.arange(0,3)] 

但是 python 抛出以下错误:

NameError: name 'arr1' is not defined

第二次尝试:

我试图通过使用 for 循环来深入研究这个错误:

M = np.array([])

for x in np.arange(0,dim):
result = np.array([])

for y in np.arange(0,dim):
result_temp = sum(arr1[arr2 == x] == y)
result = np.append(result, result_temp)

M = np.append(M,result)

在这种情况下,Python 不会抛出先前的错误,但我得到的不是 3x3 数组,而是 1x9 数组,但我无法获得所需的 3x3 数组。

提前致谢。

最佳答案

您的第一个列表理解有效。如果定义了 arr1,您将不会得到 NameError:

import numpy as np
np.random.seed(2016)
arr1 = np.random.randint(3, size = 100)
arr2 = np.random.randint(3, size = 100)
result = [[sum(arr1[arr2 == y] == x) for x in np.arange(0,3)]
for y in np.arange(0,3)]
print(result)
# [[10, 9, 10], [8, 13, 15], [18, 8, 9]]

但您可以改用 np.histogram2d :

result2, xedges, yedges = np.histogram2d(arr2, arr1, bins=range(4))
print(result2)

产量

[[ 10.   9.  10.]
[ 8. 13. 15.]
[ 18. 8. 9.]]

关于python - 使用列表理解创建 numPy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41035942/

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