Создание 2d массива NumPy (Python) - PullRequest
0 голосов
/ 14 февраля 2019

NumPy newb.

Я создал простой 2d-массив в np_2d ниже.Работает отлично.

Конечно, обычно мне нужно создавать Nd-массивы, добавляя и / или объединяя существующие массивы, поэтому я попробую это позже.

Метод np.append (с параметром axis или без него), похоже, ничего не делает.

Мои попытки использовать .concantenate () и / или просто заменить необработанные списки массивами np также не удаются.

Я уверен, что это тривиально сделать ... просто нетривиально для меня банкомат.Кто-то может подтолкнуть меня в правильном направлении?TY.

import numpy as np

# NumPy 2d array:
np_2d = np.array([[1.73, 1.68, 1.71, 1.89, 1.79], [65.4, 59.2, 63.6, 88.4, 68.7]])

print (np_2d) 

# [[ 1.73  1.68  1.71  1.89  1.79]
# [65.4  59.2  63.6  88.4  68.7 ]]

print (np_2d[1]) # second list

# [65.4 59.2 63.6 88.4 68.7]

np_2d_again = np.array([1.1, 2.2, 3.3])

np.append(np_2d_again, [4.4, 5.5, 6.6])
print(np_2d_again)

# wrong: [1.1 2.2 3.3], expect [1.1 2.2 3.3], [4.4, 5.5, 6.6]
# or MAYBE [1.1 2.2 3.3, 4.4, 5.5, 6.6]


np_2d_again = np.array([[1.1, 2.2, 3.3]])
np.concatenate(np_2d_again, np.array([4.4, 5.5, 6.6]))

# Nope: TypeError: only integer scalar arrays can be converted to a scalar index

print(np_2d_again)

np_height = np.array([1.73, 1.68, 1.71, 1.89, 1.79])
np_weight = np.array([65.4, 59.2, 63.6, 88.4, 68.7])

np2_2d_again = np.array(np_height, np_weight)

# Nope: TypeError: data type not understood

height = [1.73, 1.68, 1.71, 1.89, 1.79]
weight = [65.4, 59.2, 63.6, 88.4, 68.7]

np2_2d_again = np.array(height, weight)

# Nope: TypeError: data type not understood

1 Ответ

0 голосов
/ 14 февраля 2019

Для подобных вопросов документы могут быть действительно полезны.Проверьте их здесь:

Используя их вынайду:

In [2]: np_2d = np.array([[1.73, 1.68, 1.71, 1.89, 1.79], [65.4, 59.2, 63.6, 88.4, 68.7]])
   ...: 
In [2]: np_2d
Out[2]: 
array([[ 1.73,  1.68,  1.71,  1.89,  1.79],
       [65.4 , 59.2 , 63.6 , 88.4 , 68.7 ]])

Обратите внимание на ввод в np.array.Это один список, содержащий 2 списка одинаковой длины.

In [3]: np_2d_again = np.array([1.1, 2.2, 3.3])
In [4]: np.append(np_2d_again, [4.4, 5.5, 6.6])
Out[4]: array([1.1, 2.2, 3.3, 4.4, 5.5, 6.6])

Посмотрите на np.append документы.Видите, что говорит о бродяжничестве?Он соединяет один (3,) массив с другим, результатом является (6,).

np.append плохо назван и часто используется неправильно.Это не капля вместо добавления в список.Во-первых, он не работает на месте.

В вашем np.concatenate(np_2d_again, np.array([4.4, 5.5, 6.6])) вы получаете ошибку, поскольку он ожидает номер оси в качестве второго аргумента.Перечитайте документы.Вам нужно дать список массивов, к которым вы хотите присоединиться.np.append может ввести в заблуждение.

Правильный способ использования concatenate:

In [6]: np.concatenate([np_2d_again, np.array([4.4, 5.5, 6.6])])
Out[6]: array([1.1, 2.2, 3.3, 4.4, 5.5, 6.6])

Но так как оба входа (3,), они могут быть соединены только на оси 0Создание формы (6,).

np2_2d_again = np.array(np_height, np_weight) имеет аналогичную проблему.Второй аргумент должен быть dtype, а не другим массивом.Вы правильно использовали np.array в первый раз.

In [7]: np.array([np_2d_again, np.array([4.4, 5.5, 6.6])])
Out[7]: 
array([[1.1, 2.2, 3.3],
       [4.4, 5.5, 6.6]])

np.array соединяет компоненты вдоль новой оси.Он обрабатывает список массивов в основном так же, как ваш первоначальный список списков.

np.stack является полезным интерфейсом для concatenate, который ведет себя как np.array (с немного большей гибкостью в использованииоси):

In [8]: np.stack([np_2d_again, np.array([4.4, 5.5, 6.6])])
Out[8]: 
array([[1.1, 2.2, 3.3],
       [4.4, 5.5, 6.6]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...