#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.]]