【问题标题】:Matrix vector operations in PythonPython中的矩阵向​​量运算
【发布时间】:2018-11-20 00:06:41
【问题描述】:

我发了一个类似的帖子here。现在我试图概括为整个数字矩阵所做的工作。

我特别想这样做:

dates = []
dates.append(NDD_month[0])
for i in range(1,len(cpi)):
    dates.append((dates[i-1] + 12 - number_of_payments[:i]) % 12)
print(dates)

其中number_of_payments<class 'list'> 类型的矩阵。

这是一个例子:

print(number_of_payments[:1])

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

在执行完我想要的之后

print(dates[:1])

应该是

[array([[8, 8, 7, 7, 6, 5, 4, 4, 11, 10, 10, 8]])]

或类似的东西。

编辑:

这是我的数据的示例:

print(number_of_payments[:3])

这给了我这个:

[
    array(
    [
        [0, 1, 0, 1, 1, 1, 0, 5, 1, 0, 2, 1]
    ]),
    array(
    [
        [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0],
        [1, 3, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0]
    ]),
    array(
    [
        [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
        [0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        [1, 0, 2, 0, 2, 1, 1, 0, 2, 1, 0, 0]
    ])
]

print(NDD_month[:3])

给我

[8, 7, 11]

现在,对于我想要的答案,我想做一些类似的事情,就像我在之前的帖子中所做的那样

dates = []
dates.append(NDD_month[0])
for i in range(1, len(first_payments)):
    dates.append((dates[i-1] + 12 - first_payments[i-1]) % 12)
print(dates)

这给了我正确的输出

[8 8 7 7 6 5 4 4 11 10 10 8]

但是现在因为我有 number_of_payments 是一个矩阵,我需要将相同的逻辑应用于这个更大的数据结构。让我知道这是否清楚。 编辑 2:

好的,这很难解释,所以我将一步一步地举例,我有这个数据或矩阵(number_of_payments),无论它在 python 中是什么:

    [[0, 1, 0, 1, 1, 1, 0, 5, 1, 0, 2, 1],
     [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0],
     [1, 3, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0]]

我有另一个名为 NDD_month 的列表或向量,前三个元素是

[8, 7, 11]

现在为了简单起见,假设我只有第一行 number_of_payments 即

[0, 1, 0, 1, 1, 1, 0, 5, 1, 0, 2, 1]

为了简单起见,假设我只有 NDD_month 的第一个元素,所以

8

然后为了得到我寻求的答案,我会这样做,Aurora Wang 也提供了一个很好的答案,就是这样

first_payments = number_of_payments[:1]
first_payments = first_payments[0][0]
dates = []
dates.append(NDD_month[0])
for i in range(1, len(first_payments)):
    dates.append((dates[i-1] + 12 - first_payments[i-1]) % 12)
print(dates)

这给了我[8, 8, 7, 7, 6, 5, 4, 4, 11, 10, 10, 8]

现在我需要对矩阵中的每一行和 NDD_month 向量中的每个元素做同样的事情。我希望这能让它更清楚。

我在想这可能会起作用,但我还是 python 新手,这不起作用:

dates = []
for i in range(1,len(NDD_month)):
    dates.append(NDD_month[i-1])
    for j in range(1, len(NDD_month)):
        dates.append((dates[j-1] + 12 - number_of_payments[i-1][j-1]) % 12)
print(dates)

【问题讨论】:

  • 你创建一个列表只是通过[]..cpi定义在哪里?
  • cpi 只是一个有一定长度的列表,我知道这样做是一样的
  • @TheIncorrigible1 如果我的问题没有意义,请澄清我会提供一个例子
  • 您能否编辑您的问题以使其更清楚?能否也提供number_of_payments的全部内容?
  • 另外,从您之前的帖子来看,我认为您访问列表的方式并非您想要的那样。当您执行number_of_payments[:i] 时,您将获得从索引0 到索引i 的列表子集(这不是您的C++ 代码所做的)。

标签: python list matrix


【解决方案1】:

如果我没听错的话,你想做这样的事情:

number_of_payments = [
    [0, 1, 0, 1, 1, 1, 0, 5, 1, 0, 2, 1],
    [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0],
    [1, 3, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0]
]
NDD_month = [8, 7, 11]
dates = []
for i in range(len(number_of_payments)):
    dates.append([NDD_month[i]])
    for j in range(1, len(number_of_payments[i])):
        dates[i].append((dates[i][j-1] + 12 - number_of_payments[i][j-1]) % 12)
print(dates)

【讨论】:

  • 是的,这似乎是对的,但是您知道如何将 number_of_payments 从当前的状态转换为 [array([[0, 1, 0, 1, 1, 1, 0 , 5, 1, 0, 2, 1]]), 数组([[0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0], [1, 3, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0]]),
  • 你想把你的数组扁平化成一个列表列表吗?
  • @Snorrlaxxx 您在使用外部库吗? array() 不是内置的
  • 实际上我认为您的代码运行良好,因为 len(number_of_payments) 为 1346,因此运行时间较长
  • 我得到了这个:IOPub 数据速率超出。笔记本服务器将暂时停止向客户端发送输出以避免崩溃。要更改此限制,请设置配置变量 --NotebookApp.iopub_data_rate_limit
猜你喜欢
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 2018-02-23
相关资源
最近更新 更多