【问题标题】:python numpy matrix row wise operations: columns in each rowpython numpy矩阵逐行操作:每行中的列
【发布时间】:2020-06-20 10:40:19
【问题描述】:

如何遍历矩阵并获取每行的列数?如果我有一个矩阵,并且矩阵中的某些元素是 NaN(空),例如:[[4,2,9,4],[3,4,8,6],[5,NaN,7,7] ,[Nan,8,Nan,Nan]],如何计算行长度?

我试过了:

len(matrix) # number of rows
=len(matrix[0]) # number of columns

但这给了我总数。

所以我想得到一个向量,表示每行中的列数:[4,4,3,1] 例如

我的想法是这样循环:

for i in matrix:

然后是一个循环搜索。但我不知道该怎么做

编辑:我尝试了@wavy 的方法,它奏效了。我可以这样做吗:

# empty list
Final=[]

for i in range(matrix):
    columns=np.isnan(matrix).sum(axis=1)
    result=-columns+matrix.shape[1]
    if result==1:
        Final.append(matrix[i])
        
        
    print(Final)

I also need to put other conditions, when result==2, and when result>2

【问题讨论】:

  • 你想在大型矩阵上使用它吗?
  • 不,我现在正在尝试使用 3(列)x8(行)矩阵
  • 在一个 numpy 数组中,所有列的长度都相同。 np.nan 不算“空”。听起来你想计算非 nan 值的数量。这很好,但描述应该更清楚。

标签: python numpy matrix vector


【解决方案1】:

这可能比 David Wierich 的建议更快:

import numpy as np 

x = np.array([[4, 2, 9, 4], [3, 4, 8, 6], [5, np.nan, 7, 7], [np.nan, 8, np.nan, np.nan]])
y = np.isnan(x).sum(axis=1)
result = -y + x.shape[1]

【讨论】:

  • 谢谢!既然我有了这个,那么我能否以某种方式让它说“如果该行的长度为 1(所以只有在有 1 个数字的地方),那么新向量中的数字应该是那个数字”?
  • 类似这样的东西:for i in range(matrix): columns=np.isnan(matrix).sum(axis=1) result=-columns+matrix.shape[1] if result==1: # then here it should keep that number in the vector where result is 1 print(result)
  • 完成我发布的内容后,您可以试试这个:x[np.isnan(x)] = 0 for i in range(len(result)): if result[i] == 1: result[i] = np.max(x[i, :])。可能有比循环遍历 result 数组更快的方法,但我无法立即想到它。
  • 有没有可能我可以以任何方式再问你一些问题?
  • 我在线时间有点长,我们可以在这里聊天,我想:chat.stackoverflow.com/rooms/216320/discuss-numpy-question
【解决方案2】:

您可以遍历行并为每一行使用(否定的)numpy.isnan 方法:

lengths = [np.sum(~np.isnan(row)) for row in matrix]

由于这会在 np.isnan 中建立一个布尔数组,因此可能会有更快的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 2016-07-06
    • 1970-01-01
    • 2016-04-18
    • 2016-11-30
    • 1970-01-01
    相关资源
    最近更新 更多