2016-03-09 2 views
1

я пытался сделать эту матрицуPython Создание массива с помощью функции

array([[0,1,2], 
     [10,11,12], 
     [100,101,102], 
     [110,111,112]]) 

с этой функцией

def f(x,y): 
    if x < 2: 
     return 10 * x + y 
    else : 
     return 100 + 10 * x + 6 

и

print(np.fromfunction(f,(4,3),dtype=int) 

Однако, это дало мне ошибку

The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

Я думаю, x не означает точный ряд, который я хотел использовать.

Как я могу исправить эту функцию, чтобы получить результат выше, и могу ли я знать, в чем проблема?

+0

Пожалуйста, проверьте ваше сообщение, оно не является исполняемым кодом в виде кода на Python. – roadrunner66

+0

Да, у меня есть ошибка для этого. Я хочу знать, что означают х, которые я описал. Спасибо. – tunaBritto

+0

Можете ли вы разместить свой желаемый результат? –

ответ

0
import numpy as np 

def f(i,j): 
    return np.where(i<2, i*10+j, 100+j+10*(i-2) ) 

print np.fromfunction(f ,(4,3),dtype=int) 

выход:

[[ 0 1 2] 
[ 10 11 12] 
[100 101 102] 
[110 111 112]] 

np.where возвращается отдельный элемент, а не w дыра.

+0

Спасибо roadrunner66, вот что я хочу .. – tunaBritto

0
f,(4,3) clear comma after "f". 
+2

сделать его более объяснительным, чтобы другие могли также понять –

0

Причина, по которой это не работает, заключается в том, что функция переходит к своим первым аргументам, а не к int.

код жалуется, потому что a < 2 является массив/INT сравнения, вы должны запустить a.all() < 2

Рабочий код становится:

from numpy import fromfunction 

def f(x,y): 
    if x.all() < 2: 
     return 10 * x + y 
    else : 
     return 100 + 10 * x + 6 

print fromfunction(f,(3,3),dtype=int) 
+0

вывод: [[0 1 2] [10 11 12] [20 21 22]] – roadrunner66

+0

да В чем проблема ... мой результат пришел именно так. – tunaBritto

Смежные вопросы