python (numpy) - создать массив и как реализовать выражение - PullRequest
2 голосов
/ 28 октября 2011

у меня есть это:

npoints=10

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

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

Также я хочу оценить это:

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

Я пытаюсь оценить experiment[:,0]**2+experiment[:,1]**2, и если он> 1, то элемент в таблице становится 0, в противном случае становится 1.

Таблица должна дать мне что-то вроде [1,1,1,1,0,1,0,1,1,0]. Я не могу попробовать, потому что я не могу создать массив "таблица". Кроме того, если есть лучший способ (со списком), чтобы произвести это ..

Спасибо!

1 Ответ

2 голосов
/ 28 октября 2011

Попробуйте:

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)

(при условиичто вы уже импортировали zeros из NumPy).Тогда ваш цикл for должен работать как написано.

В сторону: я подозреваю, что вы хотите range(npoints) вместо range(1, npoints) в вашем for утверждении.

Редактировать: только что заметил1 и 0 назад.Теперь исправлено.

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