Добавление строки в массив numpy / python [duplicate]

Это работает в Swift 3.1 и более поздних версиях:

import AppKit

public extension NSBezierPath {

    public var cgPath: CGPath {
        let path = CGMutablePath()
        var points = [CGPoint](repeating: .zero, count: 3)
        for i in 0 ..< self.elementCount {
            let type = self.element(at: i, associatedPoints: &points)
            switch type {
            case .moveToBezierPathElement: path.move(to: points[0])
            case .lineToBezierPathElement: path.addLine(to: points[0])
            case .curveToBezierPathElement: path.addCurve(to: points[2], control1: points[0], control2: points[1])
            case .closePathBezierPathElement: path.closeSubpath()
            }
        }
        return path
    }

}
2
задан jabaldonedo 29 September 2013 в 12:02
поделиться

3 ответа

In [3]: x = np.array([[1, 2], [2, 3]]
In [4]: y = np.array([[3], [4]])
In [9]: z = np.hstack([x, y])

In [10]: z
Out[10]:
array([[1, 2, 3],
       [2, 3, 4]])

In [11]: z[:,:1]
array([[1],
       [2]])
-1
ответ дан Greg Whittier 18 August 2018 в 23:08
поделиться

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

>>> import numpy as np
>>> a = np.array([[1,2], [2,3]])
>>> b = np.array([[3], [4]])
>>> np.hstack((a,b))
 array([[1, 2, 3],
        [2, 3, 4]])

Удаление еще проще, просто срез:

>>> c = a[:,:1]
 array([[1],
        [2]])
1
ответ дан jabaldonedo 18 August 2018 в 23:08
поделиться

Существует метод numpy.concatenate

import numpy as np
np.concatenate( [ np.array( [ [1,2], [2,3] ] ), np.array( [ [3],[4] ] ) ] , axis = 1)

или просто используйте hstack или vstack

np.hstack( [ np.array( [ [1,2], [2,3] ] ), np.array( [ [3],[4] ] ) ] )

. Это могут быть также используется для удаления столбца (объединить два подмассива) - это можно использовать для удаления многих столбцов.

Чтобы удалить i-й столбец, вы можете взять подмассивы в этот столбец, а затем со следующего и объединить их. Например, чтобы удалить второй столбец (index 1):

a - np.array( [ [1,2,3], [2,3,4] ] )
a1= a[:,:1]
a2= a[:,2:]
np.hstack([a1,a2])

, поэтому вообще

def remove_column( a, i ):
    return np.hstack( [a[:,:i], a[:,(i+1):] ] )

, а затем

>>> remove_column(a, 1)
array([[1, 3],
       [2, 4]])
>>> remove_column(a, 0)
array([[2, 3],
       [3, 4]])

Фактически , как указано в комментарии - numpy реализует свой собственный delete метод

np.delete(a, 1, 1)

удаленный второй столбец

и удаление нескольких из них можно выполнить с помощью

np.delete(a, [column1, columne2, ..., columnK], 1)

Третий аргумент - спецификатор оси, 0 будет означать строки, 1 столбцы, None выравнивает весь массив

4
ответ дан lejlot 18 August 2018 в 23:08
поделиться
  • 1
    он сообщает об ошибке: ValueError: все размеры входного массива, кроме оси конкатенации, должны точно совпадать – liumilan 29 September 2013 в 11:52
  • 2
    извините за опечатку, это должно быть axis=1 – lejlot 29 September 2013 в 11:54
  • 3
    спасибо. Теперь добавьте столбец, используя hstack. Но я все еще озадачен удалением указанного столбца, можете ли вы дать более подробную информацию – liumilan 29 September 2013 в 12:04
  • 4
    Я обновил ответ, чтобы более подробно его рассмотреть – lejlot 29 September 2013 в 12:15
  • 5
    Почему бы не использовать np.delete для удаления столбцов? – Akavall 29 September 2013 в 15:42
Другие вопросы по тегам:

Похожие вопросы: