Как найти отрицательные элементы двумерного массива

Since arr is 2d, iteration gives you the rows, not the elements.

Make a sample array:

In [347]: arr=np.arange(16).reshape(4,4)-10
In [348]: arr
Out[348]: 
array([[-10,  -9,  -8,  -7],
       [ -6,  -5,  -4,  -3],
       [ -2,  -1,   0,   1],
       [  2,   3,   4,   5]])

Iterate with some prints:

In [350]: for i in arr:
   print(i)
   print(i<0)
   print((i<0).any())
   .....: 

result:

[-10  -9  -8  -7]
[ True  True  True  True]
True
[-6 -5 -4 -3]
[ True  True  True  True]
True
[-2 -1  0  1]
[ True  True False False]
True
[2 3 4 5]
[False False False False]
False

The ValueError results when you try to use that boolean array np.array([True, True, False, False]) in an if statement. Applying all or any to the array reduces it to one scalar True/False value, which works in the if statement.

You can apply the negative test to the whole array, and apply all/any to rows (or columns) – without iteration:

In [351]: arr<0
Out[351]: 
array([[ True,  True,  True,  True],
       [ True,  True,  True,  True],
       [ True,  True, False, False],
       [False, False, False, False]], dtype=bool)
In [352]: (arr<0).any(axis=1)
Out[352]: array([ True,  True,  True, False], dtype=bool)
In [353]: (arr<0).all(axis=1)
Out[353]: array([ True,  True, False, False], dtype=bool)

to get the non-negative values in the array, you can use this boolean mask (or its negative):

In [354]: arr[arr>=0]
Out[354]: array([0, 1, 2, 3, 4, 5])

Because there are different numbers of valid values in each row it can’t give you a 2d array.

But you can go back to iteration to get a list of values for each row. Here I use a list comprehension to do the iteration.

In [355]: [a[a>=0] for a in arr]
Out[355]: 
[array([], dtype=int32),
 array([], dtype=int32),
 array([0, 1]),
 array([2, 3, 4, 5])]

Серега_

0 / 0 / 0

Регистрация: 09.11.2009

Сообщений: 6

1

в двумерном массиве анйти отрицательные числа

09.11.2009, 15:30. Показов 2268. Ответов 2

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

нуно в двухмерном массиве найти отрицательные числа и заменить их нулем.
помогите плиз найти ошибку

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Program L7;
Uses crt;
Var
mas:array [1..5,1..5] of integer;
i,j,l,n,m:integer;
Begin
clrscr;
randomize;
write('wedite n:');
read(n);
write('wwedite m:');
read(m);
 for i:=1 to n do
  begin
for j:=1 to m do
mas[i,j]:=random(10)-random(10);
end;
writeln('wwedenniy massiv :');
for i:=1 to n do
 begin
 for j:=1 to m do
 writeln(mas[i,j]);
 read;
 end;
for i:=1 to n do
begin
for j:=1 to m do
begin
if mas[i,j]<0 then
begin
mas[i,j]:=0;
readln;
   end;
    end;
   begin
for i:=1 to n do
begin
for j:=1 to m do
begin
if mas[i,j]>=0 then
writeln(mas[i,j]);
readln;
readkey;
end;
End;
end;
end;
end.



0



Давид

Программист 1С

859 / 647 / 187

Регистрация: 03.03.2009

Сообщений: 1,154

09.11.2009, 15:34

2

Серега_,
Пожалуйста…будут вопрос – обращайтесь!

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Program maxim;
Uses crt;
 var b:array [1..100,1..100] of integer;
     i,j,n:integer;
begin
clrscr;
 Writeln (' vvedite razmernost matrici ');
 Readln (n);
  for i:=1 to n do
    for j:=1 to n do begin
                     write ('B[',i,',',j,']=');
                     Readln (b[i,j]);
                     end;
writeln (' Polychena matrica ');
for i:=1 to n do
 begin
 for j:=1 to n do
    Write ('  ',b[i,j],' ');
    writeln;
 end;
writeln;
 for i:=1 to n do
     for j:=1 to n do
      if b[i,j]<0 then b[i,j]:=0;
writeln (' OTBET ');
for i:=1 to n do
 begin
 for j:=1 to n do
    Write ('  ',b[i,j],' ');
    writeln;
    end;
Readln
end.



1



0 / 0 / 0

Регистрация: 09.11.2009

Сообщений: 6

09.11.2009, 15:46

 [ТС]

3

спс большое



0



Здравствуйте. Помогите пожалуйста с решением задачи. Нужно создать двумерный массив и произвести с ним следующие операции:
Найти максимальный и минимальный элемент двумерного массива
Найти элементы массива, повторяющиеся более одного раза
Найти все отрицательные элементы в массиве, и заменить их на ноль
Сделать из массива выборку случайного элемента

Реализую так:

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>

int main()
{
int masotr [5];
	int dvumas[4][4] = 			// Определение двумерного массива
		{
			{3,6,4,-2},
			{7,2,-5,7},
			{1,-1,9,8},
			{6,-7,-4,4}
		};
	int i,k,j,v,;
printf("Что ищем?
1 – Максимальное и минимальное, 
2 – Повторы более одного раза,
3 – Все отрицательные значения,
4 – Случайный элемент");
v = 0;
while(v==0)
{
scanf("%d",&v); printf("n");
if(v!=1&&v!=2&&v!=3&&v!=4) v=0;
}
	if(v==1)
		{
//Нахождение максимального и минимального элементов
int *maxel = &dvumas[0][0]; // Определение указателя на максимальный эл.
int *minel = &dvumas[0][0];	// Определение указателя на минимальный эл.

for( i = 0 ; i < 4 ; i++ )
{
if(dvumas[i][i] > *maxel ) maxel = &dvumas[i][i];
if(dvumas[i][i] < *minel ) minel = &dvumas[i][i];
		};
printf("Maximum: %d %c",*maxel,'n'); 
printf("Minimum: %d %c",*minel,'n');

		};
	if(v==2)
		{
//Нахождение элементов массива, встречающихся более одного раза
for (k=0;k<4;k++)
		for (j=0;j<4;j++)
		dvumas[masotr[k,j]]++;

for(i=0;i<5;i++)cout <<masotr[n]<<’’;
};
	if(v==3)
		{
// Найти все отрицательные элементы в массиве, и заменить их на ноль
for (k=0;k<4;k++)
		for (j=0;j<4;j++){ 
if (array[ k,j ] > 0){
array[ k,j ] = 1; 
    	} 
}
};
system("pause");
 
return 0;
}

Проблема в решении последней задачи. Не знаю как ее начать решать. Как к ней вообще подступиться? С чего начать?

Получил следующее задание: отсортировать строки двумерного массива по количеству отрицательных элементов.
Суть в том , что могу найти и количество элементов и номер строки в котором они расположены , но не могу это связать с сортировкой самого массива(его строк)

int matrix[A][A]; //какая-то матрица
int array[A][2];
    count=0;
    c=0;
    for ( i = 0; i < A; i++)
    {
        for ( j = 0; j < A; j++)
        {
            //находим отрицательные элементы
            if (matrix[i][j]<0)
            {
                count++;
            }
        }
    //записываем в первое значение номер строки
        array[c][0]=i;
    //во второе значение записываем количество отрицательных элементов 
        array[c][1]=count;
        c++;
        count=0;
    }

записал значения в другой двумерный массив [A][2](#define A 6)
проблема состоит в том , что не могу придумать логически как отсортировать один массив по значениям.
По возможности подскажите способ проще.

задан 27 окт 2020 в 7:33

knwsrw's user avatar

Разбейте задачу на этапы.

На первом этапе, запишите в промежуточный одномерный массив количества отрицательных элементов в строках.

На втором этапе, сортируйте этот массив, одновременно переставляя строки в выходной матрице.

Поздравляю, вы великолепны!

ответ дан 27 окт 2020 в 8:06

gbg's user avatar

gbggbg

22.1k2 золотых знака32 серебряных знака52 бронзовых знака

помогите решить здачу. на Паскале. Дан двумерны массив. определить : есть ли в данном массиве отрицательный элемент.

Руслан Кантемиров



Ученик

(82),
на голосовании



11 лет назад

Голосование за лучший ответ

Manunich

Мудрец

(15831)


11 лет назад

var m:array[1..20] of array[1..20] of Integer;i,j,r:Integer;
begin
randomize;r:=0;
for i:=1 to 20 do for j:=1 to 20 do begin m[ i][j]:=Random(1000)-500;if m[ i][j]<0 then r:=1; end;
if r=0 then writeln(‘No’) else writeln(‘Yes’);
end.

Добавить комментарий