如何合并np矩阵中的行?

时间:2019-03-19 16:22:37

标签: python numpy

我有一个具有2行N列的numpy矩阵,例如(如果N=4):

[[ 1  3  5   7]
 [ 2  4  6   8]]

目标是创建字符串1,2,3,4,5,6,7,8

  • 合并行,以使第一行的元素具有偶数(1、3,...,N-1)位置(索引从1开始),第二行的元素具有奇数位置( 2,4,...,N)。

以下代码可以工作,但效果不是很好:

    xs = []
    for i in range(number_of_cols):
        xs.append(nums.item(0, i))
    ys = []
    for i in range(number_of_cols):
        ys.append(nums.item(1, i))
    nums_str = ""
    for i in range(number_of_cols):
        nums_str += '{},{},'.format(xs[i], ys[i])
  • 使用逗号作为分隔符(row.join(','))加入结果列表

如何使用内置函数合并行(或者整体上以更优雅的方式合并行)?

3 个答案:

答案 0 :(得分:0)

可以通过以下方式加入行:

>>> a = np.arange(12).reshape(3,4)
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> np.hstack([a[i,:] for i in range(a.shape[0])])
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

然后将这个数组转换为字符串很简单。

答案 1 :(得分:0)

在展平(或拉平)时指定F的顺序:

In [279]: arr = np.array([[1,3,5,7],[2,4,6,8]])                                           
In [280]: arr                                                                             
Out[280]: 
array([[1, 3, 5, 7],
       [2, 4, 6, 8]])
In [281]: arr.ravel(order='F')                                                            
Out[281]: array([1, 2, 3, 4, 5, 6, 7, 8])

答案 2 :(得分:0)

这是一种方法:

out_str = ','.join(nums.T.ravel().astype('str'))

我们首先使用.T转换数组,然后使用.ravel()对其进行展平,然后将每个元素从int转换为str,然后应用'',' .join()合并所有str元素

试用:

import numpy as np

nums = np.array([[1,3,5,7],[2,4,6,8]])
out_str = ','.join(nums.T.ravel().astype('str'))
print (out_str)

结果:

1,2,3,4,5,6,7,8
相关问题