2011-01-31 5 views
1

HI,Симметричные матрицы в numpy?

Я хочу инициировать симметричную матрицу в python и заполнить ее нулями.

В настоящее время я инициировал массив известных измерений, но это не подходит для последующего ввода в R в качестве матрицы расстояния.

Есть ли какие-либо «простые» методы в numpy для создания симметричной матрицы?

Спасибо, D.

Редактировать

я должен уточнить - создание 'симметричная' матрица хорошо. . Однако меня интересует только формировать нижнюю треугольную форму, т.е.

ar = numpy.zeros((3, 3)) 

array([[ 0., 0., 0.], 
     [ 0., 0., 0.], 
     [ 0., 0., 0.]]) 

Я хочу:

array([[ 0], 
     [ 0, 0 ], 
     [ 0., 0., 0.]]) 

Возможно ли это?

+0

Не могли бы вы подробнее рассказать о том, что вы подразумеваете под «неподходящим для последующего ввода в R в качестве матрицы расстояния». Вы не отметили «R», так ли это актуально? Спасибо – eat

+0

Извините - нет, это не очень актуально. Расстояния между элементами (эвклидовым, манхэттенским, косинусным и т. Д.) Вычисляются попарно, следовательно, симметричный вывод. Я вычисляю пользовательские матрицы, так как R doen не очень хорошо обрабатывает мои данные. Это еще одна история. Извиняюсь за путаницу! –

+1

@ Darren: Не знаете, что вы ищете. Возможно, вы предположите, что вы рассчитываете только, например, верхнюю трехдиагональную часть и как-то магически более низкую трехдиагональную часть, отражающую это? Даже выполнимый я ожидал бы штрафов за производительность. Вы хотите показать какой-либо код, что у вас есть? – eat

ответ

3

Я не думаю, что можно попробовать работать с такими треугольными массивами.

Так вот, например, простой реализации (квадрат) попарно евклидовых расстояний:

def pdista(X): 
    """Squared pairwise distances between all columns of X.""" 
    B= np.dot(X.T, X) 
    q= np.diag(B)[:, None] 
    return q+ q.T- 2* B 

Для выполнения мудр это трудно превзойти его (в уровне Python). Каково было бы основное преимущество использования этого подхода?