【问题标题】:Making n matrixes with repeating numbers用重复数字制作n个矩阵
【发布时间】:2013-08-30 18:47:35
【问题描述】:

我是 Python 新手(和一般编程),想知道是否有人可以帮助我解决这个问题?

我想制作 n (1*4) 个矩阵,其中第一个是:

[1,2,3,4], 

还有接下来的

[3,4,5,6],  

[5,6,7,8], 

[7,8,9,10]

等等..

n=70 

到目前为止我已经尝试过了,但我只得到了前 1 和 2 的权利,然后它重复了!

L2G = np.zeros((70,1,4))
for i in range(70):
    L2G[i,:,:] = [1,2,3,4]
    if L2G[i,0,0] == L2G[i-1,0,0]:
        L2G[i,:,:] += 2

【问题讨论】:

  • "有什么聪明的代码吗?" - StackOverflow 不是免费的代码服务。你有没有尝试过?
  • 到目前为止你有没有尝试过?如果你一直依赖别人的免费代码,你将无法学习如何有效地编程。
  • "StackOverflow 不是免费的代码服务!"是的,我知道这不是免费的“代码加注”,我忘了提到我一直在尝试几件事,但我对此很陌生,可以发布一些愚蠢的代码!无论如何,我尝试先让 list = zeros((70,1,4)) # 然后将数字分配给每一层。但后来我卡住了!
  • @user2734012 我喜欢切片的理解。 [[x+2,x+3,x+4,x+5] for x in range(-1,139)][::2] List Comprehensions 5.1.4

标签: python arrays list python-2.7


【解决方案1】:

一种可能性:

>>> n = 4
>>> result = np.arange(1,5) + 2*np.arange(n)[:,None]
>>> result
array([[ 1,  2,  3,  4],
       [ 3,  4,  5,  6],
       [ 5,  6,  7,  8],
       [ 7,  8,  9, 10]])

这是因为 numpy broadcasting 的行为方式。可以添加一维数组

>>> np.arange(1,4+1)
array([1, 2, 3, 4])

二维数组

>>> 2*np.arange(n)[:,None]
array([[0],
       [2],
       [4],
       [6]])

以产生所需的结果。

请注意,这是一个对象,就像您的 L2G,而不是 n 单独的对象,并且是 array,而不是 matrix

【讨论】:

  • 非常好,非常感谢!这正是我想要的。干杯!
猜你喜欢
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 2013-08-04
相关资源
最近更新 更多