gpt4 book ai didi

python - 用数组对象的一维数组创建一个矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:48 25 4
gpt4 key购买 nike

我想将数组对象的一维数组转换为 numpy 矩阵,以在行上执行其元素的总和。数组的一维数组是:

 out = array([[array([0]), array([ 23.]), array([0]), array([0]),
array([ 1., 0.]), array([0]), array([0]), array([0])],
[array([ 0.]), array([ 0.]), array([ 18.]), array([ 0.]),
array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])],
[array([ 0.]), array([ 19.]), array([ 15.]), array([ 25.]),
array([ 0.]), array([ 0.]), array([ 0.]), array([ 1.])],
[array([ 0.]), array([ 0.]), array([ 20.]), array([ 20.]),
array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])],
[array([ 22.]), array([ 26.]), array([ 23.]), array([ 18.]),
array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])],
[array([ 0.]), array([ 0.]), array([ 20.]), array([ 13.]),
array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])],
[array([ 0.]), array([ 16.]), array([ 20.]), array([ 18.]),
array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])],
[array([ 0.]), array([ 0.]), array([ 18.]), array([ 0.]),
array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])],
[array([0]), array([ 23.]), array([0]), array([0]),
array([ 1., 0.]), array([0]), array([0]), array([0])]], dtype=object)

首先,我想对不同数组中的 double 值(如果存在)求和,这是第一个数组 (1+0) 和最后一个数组 (1+0) 的情况,以获得最终的 1D包含所有单个值的数组的数组:

 out 2 = array([[array([0]), array([ 23.]), array([0]), array([0]),
array([ 1]), array([0]), array([0]), array([0])],
[array([ 0.]), array([ 0.]), array([ 18.]), array([ 0.]),
array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])],
[array([ 0.]), array([ 19.]), array([ 15.]), array([ 25.]),
array([ 0.]), array([ 0.]), array([ 0.]), array([ 1.])],
[array([ 0.]), array([ 0.]), array([ 20.]), array([ 20.]),
array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])],
[array([ 22.]), array([ 26.]), array([ 23.]), array([ 18.]),
array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])],
[array([ 0.]), array([ 0.]), array([ 20.]), array([ 13.]),
array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])],
[array([ 0.]), array([ 16.]), array([ 20.]), array([ 18.]),
array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])],
[array([ 0.]), array([ 0.]), array([ 18.]), array([ 0.]),
array([ 0.]), array([ 0.]), array([ 0.]), array([ 0.])],
[array([0]), array([ 23.]), array([0]), array([0]),
array([ 1.]), array([0]), array([0]), array([0])]], dtype=object)

一旦我得到“out2”,我想用它制作一个矩阵(8X8,不应该考虑out2的最后一个数组,因为它等于第一个),这样“out2”的第一个数组将是新矩阵的第一个原始数据,第二个数组,第二个原始数据,依此类推。这个想法是对所有列将新矩阵第一列的前两行、第一列的后两行相加,直到最后。

最终输出应由 4 个数组组成(求和后):

sum1 = [0,23,18,0,1,0,0,0]
sum2 = [0,19,35,45,0,0,0,0]
sum3 = [22,26,43,31,0,0,0,0]
sum4 = [0,23,18,0,1,0,0,0]

如何在 numpy 中完成此操作?谢谢

最佳答案

不确定 out2 与所有这些单元素数组;也许这只是您并不真正需要的中间步骤。无论如何,您可以使用 mapsum 应用于行中的所有子列表。这将生成一个 native Python 列表列表,然后您可以使用 array 将其转回 numpy“矩阵”:

from numpy import array
out = array([[array([0]), ..., array([0])]], dtype=object)
matrix = array(map(lambda row: map(sum, row), out))

矩阵的输出:(或者,使用matrix=matrix[:-1,:]排除最后一行。)

[[  0.  23.   0.   0.   1.   0.   0.   0.]
[ 0. 0. 18. 0. 0. 0. 0. 0.]
[ 0. 19. 15. 25. 0. 0. 0. 1.]
[ 0. 0. 20. 20. 0. 0. 0. 0.]
[ 22. 26. 23. 18. 0. 0. 0. 0.]
[ 0. 0. 20. 13. 0. 0. 0. 0.]
[ 0. 16. 20. 18. 0. 0. 0. 0.]
[ 0. 0. 18. 0. 0. 0. 0. 0.]
[ 0. 23. 0. 0. 1. 0. 0. 0.]]

现在,您可以使用,例如matrix[0:2,:] 获取该矩阵的前两行,转置它们并使用 mapsum 获取列的总和。应用array来获取numpy数组。

sum1 = array(map(sum, matrix[0:2,:].transpose()))

当然,您也可以通过计算上述所有内容的列表理解创建一个数组,将所有这些放入 4x8 矩阵中。这里,sums[0] 将对应于上面的 sum1

sums = array([map(sum, matrix[i:i+2,:].transpose()) 
for i in range(0, len(matrix), 2)])

或者,更简单,使用 numpy 矩阵加法,将从第 0 行开始的矩阵的每隔一行 (matrix[0::2]) 与其他行相加从第 1 行开始的行 (matrix[1::2]):

sums = matrix[0::2] + matrix[1::2]

sums 的输出:(请注意,您的 sum4 是错误的;您使用了第 8 行和第 9 行。)

[[  0.  23.  18.   0.   1.   0.   0.   0.]
[ 0. 19. 35. 45. 0. 0. 0. 1.]
[ 22. 26. 43. 31. 0. 0. 0. 0.]
[ 0. 16. 38. 18. 0. 0. 0. 0.]]

关于python - 用数组对象的一维数组创建一个矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25566472/

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