向numpy数组追加大数

2024-10-03 15:25:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个x矩阵,行=12584,列784。我想基于row=12584 Col 1的另一个Tmatrix提取每一行,并将值附加到numpy数组X1或X2。即使较小的行大小为1500,也需要10分钟。我确信有更好更有效的方法来提取整行并附加到数组中

import numpy as np
import time
start_time = time.time()

Row = 12584
#Row = 1500
Col = 784
Xmatrix = np.random.rand(Row,Col)

Tmatrix = np.random.randint(1,3,(Row,1))
X1 = np.array([])
X2 = np.array([])

for i in range(Row):
    if Tmatrix[i] == 1:
        for y in range(Col):
            print ('Current row and col are --', i, y, Xmatrix[i][y])
            X1 = np.append(X1, Xmatrix[i][y])
    else:
        for y in range(Col):
            X2 = np.append(X2, Xmatrix[i][y])

print (X1)
print("--- %s seconds ---" % (time.time() - start_time))

Tags: innumpyfortimenprangecol数组
3条回答

对于列表,这应该是相当有效的:

X1 =[]
X2 =[]    
for i in range(Row):
    if Tmatrix[i] == 1:
        X1.extend(Xmatrix[i])
    else:
        X2.extend(Xmatrix[i])

如果需要,您可以在之后np.array(X1)。你知道吗

试试这个:

import numpy as np
import time
start_time = time.time()

Row = 12584
#Row = 1500
Col = 784
Xmatrix = np.random.rand(Row,Col)

Tmatrix = np.random.randint(1,3,(Row,1))

X1 = Xmatrix[(Tmatrix==1).reshape(-1)]
X2 = Xmatrix[(Tmatrix==2).reshape(-1)]

print(X1.reshape(-1))

print(time.time() - start_time)

在我的电脑上,这个程序只需0.34秒。 使用numpy时,最好通过索引和切片来避免循环 http://codeinpython.com/tutorials/numpy-array-indexing-slicing/

您可以通过for y in range(Col):列删除迭代,在numpy中,您可以通过以下方式检索整行:

Xmatrix[i, :]

然后用

X1=np.append(X1, [Xmatrix[i, :]], axis=0)

或者:

X1=np.vstack([X1, Xmatrix[i, :]])

编辑

要使附加工作-首先,您需要在适当的形状参数中创建X1和X2。在这种情况下:

X1=np.empty(shape=(0, Col))
X2=np.empty(shape=(0, Col))

相关问题 更多 >