python numpy матричные операции по строкам: столбцы в каждой строке - PullRequest
1 голос
/ 20 июня 2020

Как я могу l oop над матрицей и получить количество столбцов в каждой строке? Если у меня есть матрица, и некоторые элементы в матрице 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] например,

Моя идея состоит в том, чтобы сделать al oop следующим образом:

for i in matrix:

А потом al oop где ищет. Но я не уверен, как это сделать.

РЕДАКТИРОВАТЬ: Я попробовал метод @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

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Это может быть быстрее, чем предложение Дэвида Вирикса:

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]
0 голосов
/ 20 июня 2020

Вы можете l oop по строкам и для каждой строки использовать (отрицательный) numpy .isnan метод:

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

Поскольку это создает логический массив в np.isnan, могут быть более быстрые подходы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...