python (numpy) - створювати масив і як реалізувати вираз

у мене є це:

npoints=10

vectorpoint=random.uniform(-1,1,[1,2])
experiment=random.uniform(-1,1,[npoints,2])

і тепер я хочу створити масив з розмірами [1, n точки]. Я не можу думати, як це зробити. Наприклад таблиця = [1, n точки]

Крім того, я хочу оцінити це:

for i in range(1,npoints):
    if experiment[i,0]**2+experiment[i,1]**2 >1:
        table[i]=0
    else:
        table[i]=1

I am trying to evaluate the experiment[:,0]**2+experiment[:,1]**2 and if it is >1 then an element in table becomes 0 else becomes 1.

Таблиця повинна дати мені sth як [1,1,1,1,1,1,1,1,1,1]. Я не можу спробувати, тому що я не можу створити масив "таблиця". Також, якщо є кращий спосіб (з переліком розуміння), щоб створити це.

Дякую!

2

1 Відповіді

Спробуйте:

table = (experiment[:,0]**2 + experiment[:,1]**2 <= 1).astype(int)

Ви можете залишити виклик astype (int) , якщо ви задоволені масивом логінів, а не масивом цілих чисел. Як зазначає Джо Кінгтон, це можна спростити, щоб:

table = 1 - (experiment**2).sum(axis=1).astype(int)

Якщо вам дійсно потрібно створити стовпчик масиву table , ви можете зробити це:

table = zeros(npoints, dtype=int)

(припускаючи, що ви вже імпортували neros з numpy). Тоді ваш цикл повинен працювати, як написано.

Крім того: я думаю, що ви хочете діапазону (n точок) , а не діапазону (1, n точки) у твердженні for .

Редагувати: просто помітив, що у мене 1 та 0 секунди назад. Тепер виправлено.

2
додано
@ Mark Dickinson: Спасибі! Це чудово працює! Я хотів запитати, як <= 1 оцінює вираз. Я маю на увазі, добре, це означає, що я хочу (він реалізує оператор if), але де я можу використовувати такі "трюки"? де я можу навчитися? дякую ще раз!
додано Автор George, джерело
Це трохи чистіше, щоб просто зробити table = numpy.sum (experiment ** 2, axis = 1). Asype (int) або еквівалентно table = (experiment ** 2). Sum ( вісь = 1). атрибут (int)
додано Автор Joe Kington, джерело
Ну, я помиляюся речі ... Я не помітив <= 1 , я мав на увазі лише квадрат і додавання двох колонок окремо. Моїм еквівалентом буде (експеримент ** 2) .sum (axis = 1) <= 1 (з обертанням всієї речі в astype (int) , якщо якісь ints OP хоче.Це навчить мене коментувати, не читаючи everythign!
додано Автор Joe Kington, джерело
@ Джо Кінгтон Правда!
додано Автор Mark Dickinson, джерело
@ Джо Кінгтон: Хмм Це дає зворотну сторону того, чого хочеться; Я додав додатковий 1 - , щоб виправити це.
додано Автор Mark Dickinson, джерело
ІТ КПІ - Python
ІТ КПІ - Python
625 учасників

Канал обговорень про всякі штуки зі світу пайтону. Прохання: 0. мати повагу одне до одного; 1. не матюкатися в сторону людей; 2. не захламляти тред повідомленнями по одному слову;