【问题标题】:Array of arrays (Python/NumPy)数组数组(Python/NumPy)
【发布时间】:2012-08-18 17:48:33
【问题描述】:

我正在使用 Python/NumPy,我有两个数组,如下所示:

array1 = [1 2 3]
array2 = [4 5 6]

我想创建一个新数组:

array3 = [[1 2 3], [4 5 6]]

并将项目附加到它。例如,如果要附加的新项目是:

array4 = [7 8 9]
array5 = [10 11 12]

那么现在 array3 将是一个两行两列的数组,如下所示:

array3= [[1 2 3], [4 5 6]
         [7 8 9], [10 11 12]]

我似乎有问题,因为我的数组的元素没有用逗号分隔。

【问题讨论】:

  • 为什么不用逗号分隔数组元素?
  • 如果这是唯一的选择,我想我将不得不这样做。我正在导入一个制表符分隔的文本文件以在 python 中分析,python 使元素由制表符分隔。我希望从制表符到逗号分隔的转换是多余的,但我可能错了(这似乎是一个问题)。
  • “python 将元素用制表符分隔”是什么意思?这些行仍然是字符串吗? print repr(array1) 给了什么?
  • 其实 print repr(array1) 给了我 array([1,2,3])。现在我很困惑......

标签: python arrays numpy


【解决方案1】:

您编写不带逗号的数组似乎很奇怪(那是MATLAB syntax?)

您是否尝试过通过NumPy's documentation on multi-dimensional arrays

似乎 NumPy 有一个"Python-like" append method to add items to a NumPy n-dimensional array

>>> p = np.array([[1,2],[3,4]])

>>> p = np.append(p, [[5,6]], 0)

>>> p = np.append(p, [[7],[8],[9]],1)

>>> p
array([[1, 2, 7], [3, 4, 8], [5, 6, 9]])

它还有been answered already...

来自documentation for MATLAB users

您可以使用矩阵构造函数,它采用矩阵 MATLAB 文字形式的字符串:

mat("1 2 3; 4 5 6")

or

matrix("[1 2 3; 4 5 6]")

请试一试,告诉我进展如何。

【讨论】:

  • 数据是从制表符分隔的文本文件中导入的。附加用逗号分隔的项目是微不足道的。仍然不清楚如何附加制表符分隔的数据。试图找出如何将制表符分隔的内容转换为逗号分隔的数据。不知道制表符分隔的部分已经被回答。谢谢。
  • 尝试通过猜测输入来编辑我的答案。如果我错了,请用输入的确切形式更新您的问题(即:1 2 3\t 4 5 6 .. 等)
  • 选择了 repr(array) 解决方案(见上面的评论)
  • @user1609104 - 听起来您可能在某处使用eval。你不需要这样做,而且你不应该这样做。你能发布你的代码吗?
  • p = np.array([[1,2],[3,4]]) p = np.append(p, [[7],[8],[9]], 1)ValueError:除连接轴外的所有输入数组维度必须完全匹配
【解决方案2】:

在创建不带逗号的列表时会遇到问题。转换数据以使用逗号作为分隔符应该不会太难。

一旦你有逗号,这是一个相对简单的列表创建操作:

array1 = [1,2,3]
array2 = [4,5,6]

array3 = [array1, array2]

array4 = [7,8,9]
array5 = [10,11,12]

array3 = [array3, [array4, array5]]

在测试时我们得到:

print(array3)

[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]

如果我们使用索引进行测试,它可以正确读取由 2 行和 2 列组成的矩阵:

array3[0][1]
[4, 5, 6]

array3[1][1]
[10, 11, 12]

希望对您有所帮助。

【讨论】:

    【解决方案3】:

    如果文件只是由制表符分隔的数值,请尝试使用 csv 库: http://docs.python.org/library/csv.html (您可以将分隔符设置为'\t')

    如果您有一个文本文件,其中每一行代表矩阵中的一行,并且整数由空格\制表符分隔,并由 'arrayname = [...]' 语法包裹,您应该执行以下操作:

    import re
    f = open("your-filename", 'rb')
    result_matrix = []
    for line in f.readlines():
        match = re.match(r'\s*\w+\s+\=\s+\[(.*?)\]\s*', line)
        if match is None:
            pass # line syntax is wrong - ignore the line
        values_as_strings = match.group(1).split()
        result_matrix.append(map(int, values_as_strings))
    

    【讨论】:

    • 谢谢,刚刚在上面添加了评论。
    【解决方案4】:

    a=np.array([[1,2,3],[4,5,6]])

    a.tolist()

    上面提到的tolist方法会返回嵌套的Python列表

    【讨论】:

    • 请为您的答案添加一些解释,以帮助原始发帖人和其他阅读您的答案的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2011-09-23
    • 2017-12-23
    • 1970-01-01
    相关资源
    最近更新 更多