Как сделать так, чтобы массив NumPy имел только целочисленные значения?

#python #arrays #python-3.x #numpy

#питон #массивы #python-3.x #тупой

Вопрос:

Я пишу программу для поиска прямоугольников Isis на основе пользовательского ввода n. Цель программы — выполнить уравнение на основе ввода и вывода массива измерений для прямоугольника, где площадь == периметр. Я новичок в NumPy, и я изо всех сил пытаюсь найти ответ где-нибудь еще.

Ниже приведен фрагмент моего кода, который отвечает за вывод массива:

 def choice_2():
    n = int(input("Please enter a positive integer for n: "))
    a1 = 2 * n  1
    a2 = 4 * n
    a = np.array(list(range(a1, a2 1)))
    for j in range(a1, a2 1):
        b = (2 * n * a)/(a - 2 * n)

    print(f"nIsis rectangles of type {n}")
    print("----------------------------")
    print(np.array(list(zip(a,b))))
 

И это то, что я вывел:

 Isis rectangles of type 10
----------------------------
[[ 21.         420.        ]
 [ 22.         220.        ]
 [ 23.         153.33333333]
 [ 24.         120.        ]
 [ 25.         100.        ]
 [ 26.          86.66666667]
 [ 27.          77.14285714]
 [ 28.          70.        ]
 [ 29.          64.44444444]
 [ 30.          60.        ]
 [ 31.          56.36363636]
 [ 32.          53.33333333]
 [ 33.          50.76923077]
 [ 34.          48.57142857]
 [ 35.          46.66666667]
 [ 36.          45.        ]
 [ 37.          43.52941176]
 [ 38.          42.22222222]
 [ 39.          41.05263158]
 [ 40.          40.        ]]
 

Математика работает правильно, и она правильно архивируется, но я хочу удалить прямоугольники, которые имеют значения с плавающей запятой. Например, первый прямоугольник со сторонами 21 и 420 хорош, но третий прямоугольник со сторонами 23 и 153.33333333 — это не то, что я хочу в конечном массиве.

Ответ №1:

Найдите индексы, которые имеют целочисленные значения и фильтруют a и b используют эти индексы

 idx = (b == b.astype(int)).nonzero()
print(np.array(list(zip(a[idx],b[idx]))))
 

Testcase:

 n= 10
a1 = 2 * n  1
a2 = 4 * n
a = np.array(list(range(a1, a2 1)))
for j in range(a1, a2 1):
    b = (2 * n * a)/(a - 2 * n)

print(f"nIsis rectangles of type {n}")
print("----------------------------")
idx = (b == b.astype(int)).nonzero()
print(np.array(list(zip(a[idx],b[idx]))))
 

Вывод:

 Isis rectangles of type 10
----------------------------
[[ 21. 420.]
 [ 22. 220.]
 [ 24. 120.]
 [ 25. 100.]
 [ 28.  70.]
 [ 30.  60.]
 [ 36.  45.]
 [ 40.  40.]]