Column_match ([[1], [1,1]]) <--- как привести размеры в соответствие со значениями NA? - PullRequest
0 голосов
/ 30 сентября 2011

Любой флаг для этого?Пожалуйста, см. Предполагаемый.

>>> numpy.column_stack([[1], [1,2]])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/pymodules/python2.7/numpy/lib/shape_base.py", line 296, in column_stack
    return _nx.concatenate(arrays,1)
ValueError: array dimensions must agree except for d_0

Вход

[[1],[1,2]]

Предполагаемый выход

[[NA,1], [1,2]]

В общем случае

[[1],[2,2],[3,3,3],...,[n,n,n,n,n...,n]]

до

[[NA, NA, NA,..., NA,1], [NA, NA, ..., 2, 2], ...[n,n,n,n,n]]

, где столбцы могут изначально представлять собой матрицу с нулевым треугольником.Да, вы можете понимать термин NA как None.Я получил треугольную матрицу чуть ниже.

>>> a=[[1],[2,2],[3,3,3]]
>>> a
[[1], [2, 2], [3, 3, 3]]
>>> len(a)
3
>>> [aa+['']*(N-len(aa)) for
... 
KeyboardInterrupt
>>> N=len(a)
>>> [aa+['']*(N-len(aa)) for aa in a]
[[1, '', ''], [2, 2, ''], [3, 3, 3]]
>>> transpose([aa+['']*(N-len(aa)) for aa in a])
array([['1', '2', '3'],
       ['', '2', '3'],
       ['', '', '3']], 
      dtype='|S4')

Ответы [ 2 ]

1 голос
/ 05 октября 2011

чистый раствор NumPy:

>>> lili = [[1],[2,2],[3,3,3],[4,4,4,4]]
>>> y = np.nan*np.ones((4,4))
>>> y[np.tril_indices(4)] = np.concatenate(lili)
>>> y
array([[  1.,  nan,  nan,  nan],
       [  2.,   2.,  nan,  nan],
       [  3.,   3.,   3.,  nan],
       [  4.,   4.,   4.,   4.]])

>>> y[:,::-1]
array([[ nan,  nan,  nan,   1.],
       [ nan,  nan,   2.,   2.],
       [ nan,   3.,   3.,   3.],
       [  4.,   4.,   4.,   4.]])

Я не уверен, какой треугольный массив вы хотите, есть также np.triu_indices

(возможно, не всегда быстрее, но легко читается)

0 голосов
/ 04 октября 2011

column_stack добавляет столбец в массив. Предполагается, что этот столбец является уменьшенным (1D) массивом.

Когда я пытаюсь:

from numpy import *
x = array([0])
z = array([1, 2])

если вы сделаете это:

r = column_stack ((x,z))

Вы получите это:

>>> array([0,1,2])

Итак, чтобы добавить столбец в ваш первый массив, возможно это:

n = array([9])

arr = ([column_stack((n, x))], z)

Это показывает это:

>>> arr
([array([[9, 0]])], array([[1, 2]]))

Он выглядит так же, как ваш "предполагаемый вывод"

Надеюсь, это было полезно!

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