在循环中将列添加到矩阵

时间:2019-01-24 07:21:54

标签: python loops numpy for-loop matrix

当条件为真时,我正在尝试将一个矩阵中的选择性列添加到另一个矩阵中。我已经尝试了各种组合,但是它使用np.append等命令添加了行,对您有所帮助。谢谢

我尝试了np.append,np.concatenation,np.hstack命令,但没有得到想要的解决方案。

n,m=np.shape(K)
Z=np.array([])
for number in range(m):
    A=function
    if A<0.05:
        Z = np.append(Z,np.vstack(K[:,number]))

我希望Z矩阵的K列满足条件A。 Z = [K [:,3] K [:,8] K [:,10]] p

2 个答案:

答案 0 :(得分:0)

In [21]: Z=np.array([])
In [22]: Z.shape
Out[22]: (0,)

您希望如何向具有这种形状的数组中添加一些东西?

np.append确实有效,但这只是因为如果首先确保Z至少是1d,那么它就可以解决它。

In [23]: np.append(Z,np.arange(10))
Out[23]: array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

我们需要在numpy中使用某种大胆的大写字母,表示不要尝试在数组中附加(或连接或堆叠)数组。

您尝试建立一列列表,然后仅使用一个串联吗?

alist = []
for i in [3,8,10]:
    alist.append(K[:,[i]])
print(alist)
Z = np.concatenate(alist, axis=1)
# Z=[K[:,3] K[:,8] K[:,10]]

alist = []
alist.append(3); alist.append(8); alist.append(10)
Z = K[:,alist]

重复连接数组有两个大问题-速度很慢,而且很难入门。 (0,)形状数组很热,可以有效替代空列表。

如果您需要反复执行操作,请考虑使用列表。列表附加相对较快,并且易于使用。

答案 1 :(得分:0)

numpy实际上是用于快速/鲁棒的矩阵运算,例如乘法,加法等。

因此,您正在处理排序行/列表的结构和操作。我强烈建议您使用Pandas Dataframe

您可以根据条件轻松添加列,甚至合并两个矩阵(是的,例如sql joins)。

df.assign

df = pd.Dataframe(npArray)
df.assign('newcolumn', yourNewColumnValuesAsList)