Как добавить столбец целых чисел к двумерной матрице с плавающей точкой в ​​numpy? - PullRequest
0 голосов
/ 08 мая 2019

У меня есть ряд целых чисел, которые я хотел бы добавить в качестве столбца в 2D матрицу с плавающей точкой.Таким образом, при объединении первый столбец будет столбцом целых, второй столбец будет первым столбцом двумерной матрицы, а последний столбец будет последним столбцом матрицы.

Я пытался выделить проблему только в 1 строку, но все еще не могу заставить ее работать.Вот самый минимальный пример

tee = np.array( [[ 0.3322441,  -0.34410527, -0.1462533 , 0.35244817, -0.3557416, -0.3362794 ], [ 0.9750831,  -0.24571404 , 0.12960567,  0.14683421  ,0.00650549, -0.21060513]] )

zeros =  np.array([0])

all_data = np.hstack((zeros, tee))

output

ValueError                                Traceback (most recent call last)
<ipython-input-34-02aa17f12182> in <module>()
----> 1 all_data = np.hstack((zeros, tee))

/usr/local/lib/python3.6/dist-packages/numpy/core/shape_base.py in hstack(tup)
    336     # As a special case, dimension 0 of 1-dimensional arrays is "horizontal"
    337     if arrs and arrs[0].ndim == 1:
--> 338         return _nx.concatenate(arrs, 0)
    339     else:
    340         return _nx.concatenate(arrs, 1)

ValueError: all the input arrays must have same number of dimensions

Желаемый выход

print(all_data)

[[0],[ 0.3322441,  -0.34410527, -0.1462533 , 0.35244817, -0.3557416, -0.3362794 ], [ 0.9750831,  -0.24571404 , 0.12960567,  0.14683421  ,0.00650549, -0.21060513]]

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Вы можете использовать np.column_stack:

all_data = np.column_stack(([0]*len(tee),tee))

Это даст следующий вывод:

print (all_data)

array([[ 0.        ,  0.3322441 , -0.34410527, -0.1462533 ,  0.35244817,
    -0.3557416 , -0.3362794 ],
   [ 0.        ,  0.9750831 , -0.24571404,  0.12960567,  0.14683421,
     0.00650549, -0.21060513]])

Причина, по которой ваш метод не сработал, заключается в том, что вы пытаетесь добавить столбец одного элемента к двумерному массиву длины вертикальной оси 2. Однако приведенный выше метод преобразует ваши целые числа в числа с плавающей точкой. Если это нежелательно, вы можете посмотреть список списков, который может быть создан как:

all_data = [[0]]+tee.tolist()

, который выдает результат:

print (all_data)

[[0],
[0.3322441, -0.34410527, -0.1462533, 0.35244817, -0.3557416, -0.3362794],
[0.9750831, -0.24571404, 0.12960567, 0.14683421, 0.00650549, -0.21060513]]
1 голос
/ 08 мая 2019

Единственный способ смешать типы данных в массиве NumPy - это использовать тип данных: np.object. Это можно сделать неявным образом так:

all_data = np.asarray((zeros, *tee))

или явно так:

all_data = np.asarray((zeros, *tee), dtype=np.object)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...