【问题标题】:Adding columns to a matrix in loop在循环中向矩阵添加列
【发布时间】:2019-01-24 07:21:53
【问题描述】:

当条件变为真时,我正在尝试将一个矩阵中的选择性列添加到循环中的另一个矩阵。我尝试了各种组合,但它使用 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]))

我想要具有满足条件 A 的 K 列的 Z 矩阵。像 Z=[K[:,3] K[:,8] K[:,10]]

【问题讨论】:

  • 您好,欢迎来到 Stack Overflow。这是一个好的开始,但对我们来说最适合解决您的问题的是minimal reproducible example。我们应该能够将您的代码复制并粘贴到我们最喜欢的 IDE 中并相应地更正它以获得您也应该提供的 输出。 :)

标签: python loops numpy for-loop matrix


【解决方案1】:
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,) 形状数组是空列表的有效替代品。

如果您需要迭代地做事情,请考虑列表。 list append 比较快,而且使用简单。

【讨论】:

  • 我是 python 新手,对它了解不多,但是感谢您的热情回复。
  • 但显然你知道足够的 Python 来使用列表追加,并尝试在 numpy 中模仿它。 np.append 确实需要一些大胆的警告说明。太多人滥用它。至少你意识到它没有就地运行。
【解决方案2】:

Numpy 实际上是用于快速/稳健的矩阵运算,例如乘法、加法等。

因为,您正在处理排序行/列的表结构和操作。我强烈推荐你使用Pandas Dataframe

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

df.assign

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

【讨论】:

    猜你喜欢
    • 2014-07-06
    • 2014-04-20
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    相关资源
    最近更新 更多