在numpy数组中复制行元素

时间:2015-02-08 18:50:54

标签: python numpy

我有X格式的<class 'scipy.sparse.csr.csr_matrix'>数组,其形状为(44, 4095)

我现在想创建一个新的numpy数组,说X_train = np.empty([44, 4095])并按行以不同的顺序复制。假设我想要X的第一行X_train的第5行。

如何执行此操作(将整行复制到新的numpy数组中)与matlab类似?

2 个答案:

答案 0 :(得分:6)

将新的行顺序定义为索引列表,然后使用integer indexing定义X_train

row_order = [4, ...]
X_train = X[row_order]

请注意,与Matlab不同,Python使用基于0的索引,因此第5行的索引为4。

另请注意,整数索引(由于能够以任意顺序选择值),会返回原始NumPy数组的副本

这对于稀疏矩阵和NumPy数组同样有效。

答案 1 :(得分:0)

Python通常通过引用工作,这是你应该记住的。你需要做的是复制然后交换。我编写了一个交换行的演示函数。

import numpy as np # import numpy

''' Function which swaps rowA with rowB '''
def swapRows(myArray, rowA, rowB):
    temp = myArray[rowA,:].copy() # create a temporary variable 
    myArray[rowA,:] = myArray[rowB,:].copy() 
    myArray[rowB,:]= temp

a = np.arange(30) # generate demo data
a = a.reshape(6,5) # reshape the data into 6x5 matrix

print a # prin the matrix before the swap
swapRows(a,0,1) # swap the rows
print a # print the matrix after the swap

要回答您的问题,一种解决方案是使用

X_train = np.empty([44, 4095])
X_train[0,:] = x[4,:].copy() # store in the 1st row the 5th one 

unutbu答案似乎是最符合逻辑的。

亲切的问候,