【问题标题】:Function over each value in Python Array (without using def)Python Array 中每个值的函数(不使用 def)
【发布时间】:2022-01-19 16:44:41
【问题描述】:

输入数组为 x,尺寸为 (1 x 3),输出数组为 3 x 3(输入列 x 输入列)。输出数组的对角线是值^2。如果 row != column,则公式为每个值的 x(row)+x(col)。目前为 1 x 3,但应假定各种尺寸作为输入。不能使用'def'。当前代码不起作用,您会推荐什么?

x = np.array([[0, 5, 10]])
output array formulas = 
[[i^2,   x(row)+x(col),  x(row)+x(col)]
 [x(row)+x(col), i^2,    x(row)+x(col)]
 [x(row)+x(col), x(row)+x(col),   i^2]]

# where row and column refer to the output matrix row, column. For example, the value in (1,2) is x(1)+x(2)= 5

ideal output = 
[[0 5 10]
 [5 25  15]
 [10 15 100]]

尝试的代码:

x = np.array([[0, 5, 10]])
r, c = np.shape(x)
results = np.zeros((c, c))
g[range(c), range(c)] = x**2
for i in x:
    for j in i:
        results[i,j] = x[i]+x[j]

【问题讨论】:

  • 为什么不像:[n[i][j]**2 if i == j else n[i][j] for j in i for i in n]。 (显然你必须得到 i 和 j 的实际索引,所以这段代码只是一个算法示例。但你可以使用enumerate()
  • @EliHarold,我试过了,但出现错误:ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()。你能用给定的 x 数组展示一个例子吗?
  • 看我的回答,我写了我提到的内容。

标签: python arrays numpy


【解决方案1】:

学习使用 numpy 方法和广播:

>>> x
array([[ 0,  5, 10]])
>>> x.T
array([[ 0],
       [ 5],
       [10]])
>>> x.T + x
array([[ 0,  5, 10],
       [ 5, 10, 15],
       [10, 15, 20]])
>>> result = x.T + x
>>> result
array([[ 0,  5, 10],
       [ 5, 10, 15],
       [10, 15, 20]])

那么这个方便的内置:

>>> np.fill_diagonal(result, x**2)
>>> result
array([[  0,   5,  10],
       [  5,  25,  15],
       [ 10,  15, 100]])

可以替换results[range(c), range(c)] = x**2

【讨论】:

    【解决方案2】:

    试试这个:

    x.repeat(x.shape[1], axis=0)
    x = x+x.T
    x[np.arange(len(x)),np.arange(len(x))] = (np.diag(x)/2)**2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多