【问题标题】:Creating an array without numpy创建一个没有 numpy 的数组
【发布时间】:2021-05-29 22:12:46
【问题描述】:

在我的作业中,不允许使用 numpy,但我现在才意识到这一点。我必须删除所有 np.array() 组件并在不使用它们的情况下定义一个数组。我找不到办法。例如,我必须像这样得到 arr:

[[ 0  1  2  3  4  5  6]
 [ 7  8  9 10 11 12 13]
 [14 15 16 17 18 19 20]
 [21 22 23 24 25 26 27]
 [28 29 30 31 32 33 34]
 [35 36 37 38 39 40 41]
 [42 43 44 45 46 47 48]]

但是,当我删除这部分时: arr = np.array(range(0,N*N))

arr.shape = N,N

并尝试使用其他东西,如果不使用 numpy.我真的被困在这里了。

import numpy as np

def rotate_clockwise(x):
    return x[::-1].T


def find(element, matrix):
    for i in range(len(matrix)):
        for j in range(len(matrix[i])):
            if matrix[i][j] == element:
                return (i+1, j+1)
N = int(input())
S = int(input())

arr = np.array(range(0,N*N))

arr.shape = N,N
for i in range(S):
    a,b,c = [int(x) for x in input().split()]
    arr[a - 1:a + c, b - 1:b + c] = rotate_clockwise(arr[a - 1:a + c, b - 1:b + c])


M = int(input())
items = np.array(range(0,M))
for i in range(M):
    danscisayisi=int(input())
    items[i]=(danscisayisi)

for i in range(0, len(items)):
    items[i] = int(items[i])
noktalar = np.array(range(0,M))
for i in range(M):
    coord=(find(items[i],arr))
    result = " ".join(str(x) for x in coord)
    print(result)

【问题讨论】:

  • 如果我理解正确,你想要的是一个数组[[0, 1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27], [28, 29, 30, 31, 32, 33, 34], [35, 36, 37, 38, 39, 40, 41], [42, 43, 44, 45, 46, 47, 48]]?
  • 哦,不,我目前得到了那个数组,我想得到:(它是我帖子上的第一个文本块,一个方形数组)[[ 0 1 2 3 4 5 6] [ 7 8 9 10 11 12 13] [14 15 16 17 18 19 20] [21 22 23 24 25 26 27] [28 29 30 31 32 33 34] [35 36 37 38 39 40 41] [42 43 44 45 46 47 48 ]]
  • 您真的需要一个数组(原生类型的连续内存区域)还是只需要一个数字序列?

标签: python


【解决方案1】:

您可以改用嵌套列表。构造它们的一种方便方法是使用(嵌套)列表推导,例如

n_rows, n_cols = 7, 7

pseudo_array = [[row * n_cols + col for col in range(n_cols)] 
                for row in range(n_rows)]
pseudo_array
[[0, 1, 2, 3, 4, 5, 6],
 [7, 8, 9, 10, 11, 12, 13],
 [14, 15, 16, 17, 18, 19, 20],
 [21, 22, 23, 24, 25, 26, 27],
 [28, 29, 30, 31, 32, 33, 34],
 [35, 36, 37, 38, 39, 40, 41],
 [42, 43, 44, 45, 46, 47, 48]]

编辑:请注意,NumPy 数组也有逗号,只是它们也有自己的表示方法,因此print() 不会显示逗号。如果您想为嵌套列表做类似的事情,您可以定义自己的打印功能,例如

def print_array(a):
    """ Take a nested list a and print it like a NumPy array. """
    for i, row in enumerate(a):
        if i == 0:
            first_char = '['
        else: 
            first_char = ' '
        if i == len(a) - 1:
            last_char = ']'
        else: 
            last_char = ''    
        print(first_char + '[' + 
              ' '.join(str(i) for i in row) + ']' + last_char)
        
print_array(pseudo_array)
[[0 1 2 3 4 5 6]
 [7 8 9 10 11 12 13]
 [14 15 16 17 18 19 20]
 [21 22 23 24 25 26 27]
 [28 29 30 31 32 33 34]
 [35 36 37 38 39 40 41]
 [42 43 44 45 46 47 48]]

如您所见,它看起来几乎像一个打印的 NumPy 数组,只是还没有实现漂亮的列对齐。

【讨论】:

  • 它与我想要得到的很接近,但我必须在没有任何昏迷的情况下得到它,就像我帖子中的第一个代码块一样。我已经根据该规范编写了其余代码,但是由于模块使用的限制,我必须在最后一刻对其进行编辑
猜你喜欢
  • 2017-12-30
  • 2017-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
相关资源
最近更新 更多