Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用数组对象的一维数组生成矩阵_Python_Arrays_Numpy_Matrix - Fatal编程技术网

Python 用数组对象的一维数组生成矩阵

Python 用数组对象的一维数组生成矩阵,python,arrays,numpy,matrix,Python,Arrays,Numpy,Matrix,我想转换numpy矩阵中数组对象的1-D数组,以执行行上元素的求和。阵列的一维阵列为: 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.]), a

我想转换numpy矩阵中数组对象的1-D数组,以执行行上元素的求和。阵列的一维阵列为:

 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)
首先,我想对不同数组中的双值(如果存在)求和,这是第一个数组(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个阵列组成(总和之后):


在numpy如何做到这一点?谢谢你

我不太清楚那
out2
和所有那些元素
数组
;也许这只是一个你并不真正需要的中间步骤。无论如何,您可以使用
map
sum
应用于行中的所有子列表。这将生成一个本地Python列表列表,然后可以使用
数组将其转换回
numpy
矩阵:

from numpy import array
out = array([[array([0]), ..., array([0])]], dtype=object)
matrix = array(map(lambda row: map(sum, row), out))
matrix
:(或者,使用
matrix=matrix[:-1,:]
排除最后一行。)

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

sum1 = array(map(sum, matrix[0:2,:].transpose()))
当然,您也可以通过从一个列表中创建一个
数组
,将所有这些都放入一个4x8矩阵中。这里,
sum[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]
)相加:

总和的输出:(
sum4
是错误的;您使用了第8行和第9行。)


如果你真的需要这样做。我怀疑你的代码有很多问题。可能是,我是numpy的初学者。有没有一种方法不经过数组->矩阵转换就可以做到这一点?不可能在矩阵上迭代并用最终的4X8矩阵将两行相加吗?@diegus你是什么意思?相对于那些map/sum/zip结构,您更喜欢for循环,还是希望在一个循环中创建所有四个和?我以为你想要四个独立的求和变量。我更喜欢在一个循环中创建所有四个求和,因为我必须处理一个更大的矩阵,并且不可能写出sum1,sum2,sum3,…sumn。谢谢
sum1 = array(map(sum, matrix[0:2,:].transpose()))
sums = array([map(sum, matrix[i:i+2,:].transpose()) 
              for i in range(0, len(matrix), 2)])
sums = matrix[0::2] + matrix[1::2]
[[  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.]]