我有X
格式的<class 'scipy.sparse.csr.csr_matrix'>
数组,其形状为(44, 4095)
我现在想创建一个新的numpy数组,说X_train = np.empty([44, 4095])
并按行以不同的顺序复制。假设我想要X
的第一行X_train
的第5行。
如何执行此操作(将整行复制到新的numpy数组中)与matlab类似?
答案 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答案似乎是最符合逻辑的。
亲切的问候,